Comunidad de diseño web y desarrollo en internet

Consulta SQL a más de dos tablas con JOIN

Muchas veces es necesario consultar a mas de una tabla y debemos aprender a poder obtener los resultados correctos de la manera mas eficiente y sencilla, para lo cual vamos a usar las siguientes tablas, sacadas de un sistema de gestión de bodegas que estamos preparando para la logística en islas claber

Tablas que usaremos


Usaremos 3 tablas en este ejemplo donde la tabla us2bod nos servirá para relacionar las tablas bodegas y usuarios varios a varios


Creando las consultas


Conozco 2 formas de usar JOIN deben existir otras mas pero hasta ahora con estas me basta, uso INNER JOIN cuando quiero que solo lo resultados incluidos en el JOIN aparezcan en los resultados y LEFT JOIN cuando quiero que todos los resultados aparezcan independiente de si están o no incluidos en el JOIN, ahora vamos a hacernos algunas preguntas para poder poner en practica estos conceptos.

Consejo importante :

El uso de * en el SELECT es muy practico a la hora de desarrollar una consulta, pero es fatal para el rendimiento de esta cuando esta en producción, por varios factores, entre ellos que el resultado que arroja la consulta es mucho mas grande de lo que realmente se necesita y que al no saber el nombre de los campos que usara, el motor (mysql en mi caso) debe previamente consultar el nombre de todos los campos de la tabla, en tablas grandes con mas de 60 campos esto es fatal, muy fatal

Atento a la forma abreviada de poner alias a las tablas

Consulta con uso de INNER JOIN:


Primero vamos a ver quien tiene acceso a que bodega con el uso de INNER JOIN

Código :

SELECT 
   u.us_nombre usuario, 
   b.bod_nombre bodega  
FROM us2bod ub
INNER JOIN usuarios u ON ub.us_id =  u.us_id
INNER JOIN bodegas b ON ub.bod_id =  b.bod_id

Esto dará como resultado


Consulta con uso de LEFT JOIN:


Ahora vamos a ver a los usuarios que NO tienen bodegas asociadas, para lo cual preguntaremos que usuarios no se pudo asociar a alguna bodega

Código :

SELECT 
   u.us_nombre usuario
FROM  usuarios u
LEFT JOIN us2bod ub ON u.us_id = ub.us_id 
WHERE  ub.u2b_id IS NULL

Lo cual nos dará:


Espero que esto les sirva y les saque de mas un apuro (o lo metas en mas de uno si van a la bodega que tengo en casa).

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate