Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

como funcionan el codigo de estas consultas

Estas en el tema de como funcionan el codigo de estas consultas en el foro de Mysql en Foros del Web. estas son las tablas. esta es la consulta requerida y respuesta correcta.. no entiendo como funciona el codigo.. Indique el nombre y apellido del dueño, ...
  #1 (permalink)  
Antiguo 13/07/2012, 12:37
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 10 meses
Puntos: 5
como funcionan el codigo de estas consultas

estas son las tablas.





esta es la consulta requerida y respuesta correcta.. no entiendo como funciona el codigo..


Indique el nombre y apellido del dueño, direccion y localidad de los inmuebles que aun no fueron alquilados.


respuesta.. 1

SELECT d.nombre, d.apellido, i.direccion, i.localidad
FROM inmueble AS i LEFT JOIN contrato AS c ON c.id_inmueble = i.cod_inmueble
INNER JOIN Dueño AS d ON i.cod_inmueble = d.cod_inmueble
WHERE i.cod_inmueble is null
(c.cod_inmueble puede reemplazarse por cualquier columna de contratos)


-----------------------------------------------------------------------------

respuesta 2

SELECT d.nombre, d.apellido, i.direccion, i.localidad
FROM inmueble AS i INNER JOIN dueño AS d ON i.cod_inmmueble = d.cod_inmueble
WHERE i.cod_inmueble NOT IN (SELECT id_inmueble FROM contrato)

-------------------------------------------------------------



en la 1, se que left join, me muestra los nulos del lado de la izquierda, pero no se si lo hace antes o despues de "pegar las 3 tablas" por ue hay un inner join despues... el NULL se que me muestra vacios. como pide la consigna

bueno la 2. creo que es que mas facil , ya que dice que me muestra los dueños donde (NOT IN) actua sobre una lista de valores que devolvio la subconsulta.....


bueno , espero que me corrijan, o que me digan como funciona esto...
  #2 (permalink)  
Antiguo 13/07/2012, 14:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: como funcionan el codigo de estas consultas

Esas tablas tienen un error de diseño. Un dueño debería serlo de diversos inmuebles, al menos eso es lo que se espera, por lo que lo que corresponde es poner el ID del dueño en la tabla de Inmueble, pero no al revés.
Para que se entienda mejor dónde va la FK: El inmueble pertenece al dueño. El dueño no pertenece al inmueble, sino que posee un inmueble.
La semántica es distinta.
Eso surge desde el momento en que la el inmueble depende de la persona. No existe por si mismo en el sistema y por tanto hereda la FK de la persona.

Incluso más: Un inmueble puede pertenecer a varios dueños, por lo que correspondería que haya una tabla dueño_inmueble que relacione ambas entidades.
Sin resolver ese defecto, no se puede hacer una consulta consistente.

Lo que quiero que te quede claro es que según ese modelo, un Dueño puede serlo solo de un ùnico inmueble, y no puede tener más que un inmueble.

Por otro lado, LEFT JOIN devuelve los registros de la tabla izquierda aunque no coincidan con los de la derecha. Los nulos aparecen en la segunda tabla, no en la primera. Estás interpretando exactamente al revés, y la consulta está al revés.

Considerando el diseño que has puesto, la consulta debería ser:
Código MySQL:
Ver original
  1.     d.nombre,
  2.     d.apellido,
  3.     i.direccion,
  4.     i.localidad
  5.     Dueño D
  6.     INNER JOIN inmueble I ON d.cod_inmueble = i.cod_inmueble
  7.     LEFT JOIN contrato C ON I.id_inmueble = C.cod_inmueble
  8.     C.cod_inmueble IS NULL;
Y un anota en especial, a pesar de lo que has puesto, no puedes reemplazar C.cod_inmueble con I.cod_inmueble, porque lo que es nulo es la existencia de contratos, cuando no hay contratos sobre el inmueble. Peor el inmueble siempre tendrá un dueño, por lo que en su tabla siempre habrá alguno.

No se si el modelo de tablas y relaciones que pones es tuyo o es una consigna dada. Si es una consigna de un TP, es habitual que sean algo irracionales (truco pedagógico), por lo que hay que atenerse a lo que diga ella.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/07/2012 a las 07:49

Etiquetas: funcionan, join, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:56.