Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rubcr

#31
Bases de Datos / Re: Sentencia SQL
29 Abril 2020, 01:33 AM
Cita de: EdePC en 29 Abril 2020, 00:23 AM
Le has dado su leída al PDF que puse antes (pág.: 176)? Tienes que combinar ^ para forzar empezar con, [aeiou] que serán las vocales, luego un .* para decir cualquier otro conjunto de caracteres y finalizar con [aeiou]$ para decir que debe terminar en vocal

Código (sql) [Seleccionar]
RLIKE '^[aeiou].*[aeiou]$'
De acuerdo muchas gracias amigo.
Ahora tengo cuestión: siendo C el numero de ciudades de la tabla y P el numero de provincias devuelve la diferencia entre los dos valores.
Entiendo que hay que hacer una sentencia que cuente el numero de ciudades, el numero de provincias y que se resten los dos valores, pero no entiendo como puedo hacerlo.
#32
Bases de Datos / Re: Sentencia SQL
28 Abril 2020, 22:35 PM
Cita de: Carloswaldo en 28 Abril 2020, 22:18 PM
La segunda es para SQL Server.

HeidiSql no es el motor, es un programa para conectarse a un motor de base de datos. Aunque muy probablemente estamos hablando de MySQL (o derivados) entonces.
Si es así tendrías que usar la 1era sentencia que mostró EdePC.
Y en el caso por ejemplo que fuera que la provincia no empezase ni acabase por consonante como sería la sintaxis?
#33
Bases de Datos / Re: Sentencia SQL
28 Abril 2020, 22:13 PM
Cita de: EdePC en 28 Abril 2020, 22:02 PM
MySQL si permite utilizar Expresiones Regulares (RLIKE), pero si las usas mejor evitar los comodines de LIKE como % y _

Código (sql) [Seleccionar]
SELECT lat, long FROM antena_telefonicas WHERE provincia RLIKE '^[aeiou]';

MySQL Documentación (versión vieja 5.0, única en español) pág.: 176
http://downloads.mysql.com/docs/refman-5.0-es.a4.pdf

SQLServer por su parte ya incluye "expresiones regulares" que en realidad extiende más sus Comodines en LIKE
Código (sql) [Seleccionar]
SELECT lat, long FROM antena_telefonicas WHERE provincia LIKE '[aeiou]%';

Referencia:
https://www.sqlservertutorial.net/sql-server-basics/sql-server-like/
Entonces atendiendo a las sentencias que has escrito para mi sería válida la segunda de ellas?
#34
Bases de Datos / Re: Sentencia SQL
28 Abril 2020, 21:45 PM
Cita de: Carloswaldo en 28 Abril 2020, 21:25 PM
¿De qué motor de base de datos estamos hablando?

Me parece que LIKE no es para expresiones regulares. Al menos no lo es en PostgreSQL donde usaría SIMILAR TO o '~'.
En HeidiSql
#35
Bases de Datos / Sentencia SQL
28 Abril 2020, 21:13 PM
Buenas a todos.
Tengo un problema con una sentencia, la cual tiene que obtener la latitud y longitud de todas las antenas de la provincias que empiecen por vocal.

La selección que tengo es la siguiente:
SELECT lat, long FROM antena_telefonicas WHERE provincia LIKE '[aeiou]%';
El problema es que no me devuelve ningún dato, la sentencia no genera ningún error, pero no da datos.
El problema creo que está en el LIKE pero no sé cuál es.

Espero que alguien sepa ayudarme.
Un saludo.
#36
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 22:43 PM
Cita de: YreX-DwX en 18 Abril 2020, 22:32 PM
Si necesitas CodEq, tendrás que mirar en todas las tablas para ver dónde tienes ese dato y luego ver de todas las tablas que lo tengan, cuál es el que necesitas usar.
Para ahorrarme un mensaje: En este caso tienes un CodEq en la tabla Peticion y esa tabla ya la usabas en la consulta del apartado b, por lo que solo tienes que cambiar el campo seleccionado con PI() de CodPeticion a CodEq...




Para qué quieres usar PI(CodPetServ)?? Estás buscando el código de la petición?? Yo creo que no.
Para el apartado d simplemente se haria pi Nombre de la tabla bomberos y natural join con lo demás (apartado c)? Y si es así se pondría en la parte derecha de la intersección?
#37
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 21:19 PM
Cita de: YreX-DwX en 18 Abril 2020, 20:37 PM
Obviamente. La tabla Parque no tiene ninguna columna CodPeticion.
En el apartado C me ha surgido una duda, como junto los códigos de los equipos con el resto de la operación?
Supongo que un joint porque con una intersección no me cuadra.
Y al obtener esos código a parte del sigma también se usaría pi cod pet servicio como el anterior apartado?
#38
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 20:28 PM
Cita de: YreX-DwX en 18 Abril 2020, 18:48 PM
Explicado con un ejemplo. Vamos a suponer que los CodParque se forman con "Cpa" + 4 dígitos y los CodPeticion se forman con "CPe" + 4 dígitos.
Imagina que haces la primera parte de la intersección. Así obtienes el CodParque de los parques que se llamen C.campo y que hayan recibido alguna petición. Y los CodParque obtenidos son (por ejemplo):

CPa0001
CPa0002
CPa0015


Y ahora vamos a hacer la segunda parte de tu intersección. Con ello obtienes los CodPeticion de las peticiones de gravedad 7 y que han sido recibidas por algún parque. Y esto nos da como resultado los siguientes CodPeticion (por ejemplo):

CPe0005
CPe0008
CPe0010
CPe0015


Y tu solución es la intersección de ambos (cosa que te adelanto que no se puede hacer porque estás trabajando con campos diferentes CodParque por un lado y CodPeticion por otro... Pero supongamos que se puede hacer la intersección) que es: NADA. 0. Mejor dicho {Vacio}. No hay ninguna coincidencia entre una tabla y otra.




Hay dos formas de hacer esto:
  • USANDO UNA INTERSECCIÓN:

    (PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))

    Empecemos por la premisa de que CodPeticion es un atributo/campo/columna identificativa/discriminante/clave (porque lleva #). Esto significa que cualquier petición se puede identificar con saber su CodPeticion o que no existen dos peticiones con el mismo CodPeticion.
    La primera parte de la intersección obtiene los CodPeticion de todas las peticiones que haya recibido el parque C.campo. Por ejemplo, siguiendo con el ejemplo de antes:

    CPe0005
    CPe0006
    CPe0015

    Esos son los CodPeticion de todas las peticiones que han recibido los parques con nombre C.campo. Ahora de todos esos tenemos que ver los que tienen gravedad 7. Entonces con la segunda parte de la intersección obtenemos los CodPeticion de todas las peticiones con gravedad 7. Que son, por ejemplo:

    CPe0004
    CPe0005
    CPe0015

    Ahora si hacemos la intersección entre ambos resultados, obtenemos los CodPeticion de todas las peticiones de gravedad 7 que han recibido los parques C.campo.

    CPe0005
    CPe0015


    Recalco que la JOIN entre Parque y Recibe se hace por medio de CodParque (campo que tienen ambas en común).

  • USANDO UNA JOIN:
    En este método no me voy a explayar tanto. La primera parte es igual (JOIN entre Parque y Recibe) pero lo que hacemos es otra JOIN de esas dos con Peticion (por medio de CodPeticion).

    PI(Peticion.CodPeticion)(SIGMA(gravedad = 7)(Parque JOIN Recibe JOIN Peticion)

    En el campo del PI hay que especificar una tabla, bien Recibe o bien Peticion porque ambas tienen el campo CodPeticion pero el resultado es el mismo ya que el CodPeticion tiene que coincidir en ambas.
    Así tal cual esta consulta es peor porque trabaja con mayor cantidad de datos ya que hemos dejado los SIGMAs y PIs para el final pero eso hace que la consulta quede más simple.


    Ahora ya papel y boli (o lo que prefieras) y a leer todos los mensajes de este tema con todos los ejemplos que he ido poniendo hasta entenderlo. Creo que ya tienes ejemplos y explicaciones de sobra. :rolleyes: :rolleyes:
En la fórmula:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))

(PI(CodPeticion) de la parte de la izquierda de la intersección, sería de la tabla recibe?
#39
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 17:44 PM
Cita de: YreX-DwX en 18 Abril 2020, 17:25 PM
Pues una recomendación es que busques en Internet cosas de álgebra relacional o consultas SQL directamente si quieres (es muy parecido y así te preparas para lo que viene después). Habrá un montón de sitios donde explican Joins y con ejemplos visuales que es como mejor se ve.
Y cuando tengas una duda concreta de uno de esos sitios en los que hayas buscado es cuando deberías abrir un tema para resolver ese tema en concreto. Al final el aprendizaje va a cuenta de cada uno y aunque te parezca que estás leyendo muchas páginas y que ninguna te sirve, llegará un momento en que todo te encaje y empieces a relacionar lo que acabas de entender con aquello que viste en tal sitio y que en su momento no entendiste.

PD: Al margen de lo que está pasando, seguro que tus profesores tienen un correo al que molestarles para que te corrijan los ejercicios. Porque encima los profesores que menos se esfuerzan son luego los más tiquismiquis y te dirán que tal método no sirve o que los hagas de tal forma.
En el apartado b, la parte de: recibidas por el parque de bomberos Casa de campo tengo claro que se usa un sigma, pero me has puesto antes que hacer in pi cod_parque no tiene sentido,  como se juntaria con la parte del apartado a? Sería con un joint pero entonces la tabla recibe no le vería sentido.
#40
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 17:04 PM
Cita de: YreX-DwX en 18 Abril 2020, 16:57 PM
  • El primer apartado está bien.
  • El segundo no permite esa intersección. Tanto la unión como la intersección son dos operaciones que tienen que hacerse sobre tablas con la misma estructura y tú estás mezclando CodParque (que no tiene sentido) con CodPeticion.
  • El tercero ya tiene menos sentido todavía porque en ningún momento necesitas meter la tabla Bomberos. Y además metes el resultado del apartado anterior que también es incorrecto.
  • Y el cuarto apartado como vuelves a reutilizar la solución del segundo apartado tampoco es correcto.

    PD: El foro es para preguntar dudas concretas. No para tener aquí a un grupo de personas para corregirte todos los ejercicios. Para eso están tus profesores que para algo están cobrando... También debería ser suya la obligación de enseñar pero como todos sabemos ya, muchas veces no saben ni lo que dicen... Bueno que me caliento y esto da para un tema entero y tampoco es plan... :silbar:

    PD 2: Deberías acostumbrarte a usar más Joins y no tantas intersecciones. Con esto ya te doy la pista de que estos ejercicios pueden hacerse sin usar intersecciones.
Te entiendo, pero si de por sí no explican, en la situación que estamos menos.
Nos ha dado un pdf y nos ha mandado esto sin explicarnos nada, y nos tenemos que buscar la vida empezando en algo nuevo.