SQL Join en detalle

Curso de SQL y MySQL 2018

Toma las primeras clases gratis

COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

Una de las acciones más frecuentes a la hora de trabajar con bases de datos es hacer consultas. Si nuestra base de datos está correctamente normalizada para evitar la redundancia de datos, vamos a tener que hacer uso de consultas que permitan traer información de más de una tabla de la base de datos.

Existen dos formas de hacerlo: la primera, usar la cláusula WHERE para igualar dos campos de tablas y traer solo los registros que tienen coincidencia. La otra es usar JOINS. Esa es la que aprenderemos a usar hoy.

Conociendo la estructura de un consulta

Primero que todo, vamos a ver la estructura de una consulta usando JOIN y lo que significa cada parte.

SELECT * nombre, email, fecha, valor /*Selecciona los campos a mostrar en el resultado de la consulta*/
FROM clientes  /*Tabla base para traer los registros (LEFT)*/
(INNER|LEFT|RIGHT|FULL) JOIN pedidos /* Tipo de JOIN y tabla con la cual se hace el JOIN (RIGHT)*/
ON clientes.cliente_id = pedidos.cliente_id /*Comparación entre columnas.*/

A esta consulta le podemos agregar cláusulas WHERE, ORDER BY, entre otras, para obtener resultados más precisos como definir un rango de fechas, por ejemplo.

Tipos de JOINS

Ya vimos cómo se construye una consulta usando JOINS. Ahora veamos los tipos de JOINS que existen:

join.jpg

INNER JOIN => Trae los resultados de las tablas que cumplen con la condición de comparación entre columnas.

LEFT JOIN => Trae todos los resultados de las tablas que cumplen con la condición de comparación entre columnas y, adicionalmente, trae todos los datos de la tabla de la izquierda.

RIGHT JOIN => Similar a la anterior pero con la tabla de la derecha.

FULL JOIN => Trae los resultados de las tablas que cumplen con la condición de comparación entre columnas, además de los resultados de las o registros de las tablas de la derecha y la izquierda.

Practicando consultas con JOINS

Vamos a ver esto con ejemplos prácticos para entenderlo mejor.
Suponiendo que tenemos dos tablas, una llamada clientes y la otra pedidos, vamos a ver los diferentes resultados.

Tabla Clientes (clientes)

cliente_id nombre apellido email
1 Diego Forero df@gmail.com
2 Pedro Salazar ps@gmail.com
3 Juan Gonzalez jg@gmail.com
4 Paola Garcia pg@gmail.com
5 Lina Sanchez ls@gmail.com

Tabla Pedidos (pedidos)

order_id fecha valor cliente_id
1 01/31/2018 254 2
2 02/02/2018 125 5
3 02/02/2018 189 3
4 03/02/2018 100 6
5 03/02/2018 125 9

INNER JOIN

SELECT * nombre, email, fecha, valor FROM clientes INNER JOIN pedidos ON clientes.cliente_id = pedidos.cliente_id

Esta consulta nos como resultado esto:

nombre email fecha valor
Pedro ps@gmail.com 01/31/2018 254
Juan jg@gmail.com 02/02/2018 189
Lina ls@gmail.com 02/02/2018 125

Como podemos ver, solo trae los registros de los clientes que tienen pedidos y los pedidos de los clientes que están en la tabla, ya que son los que cumplen la condición.

LEFT JOIN

SELECT * nombre, email, fecha, valor FROM clientes LEFT JOIN pedidos ON clientes.cliente_id = pedidos.cliente_id

Aquí es importante notar cuál es la tabla de la izquierda, en nuestro caso es la tabla clientes; esta nos va a traer todos los resultados que coinciden con la condición clientes.cliente_id = pedidos.cliente_id más todos los resultados de la tabla clientes, quedando así:

nombre email fecha valor
Pedro ps@gmail.com 01/31/2018 254
Juan jg@gmail.com 02/02/2018 189
Lina ls@gmail.com 02/02/2018 125
Diego df@gmail.com Null Null
Paola pg@gmail.com Null Null

RIGHT JOIN

SELECT * nombre, email, fecha, valor FROM clientes RIGHT JOIN pedidos ON clientes.cliente_id = pedidos.cliente_id

A diferencia de la consulta usando LEFT JOIN, esta consulta nos debe arrojar los pedidos que no tienen clientes, además de los resultados que coinciden con la condición.

nombre email fecha valor
Pedro ps@gmail.com 01/31/2018 254
Juan jg@gmail.com 02/02/2018 189
Lina ls@gmail.com 02/02/2018 125
Null Null 03/02/2018 100
Null Null 03/02/2018 125

FULL JOIN

SELECT * nombre, email, fecha, valor FROM clientes FULL JOIN pedidos ON clientes.cliente_id = pedidos.cliente_id

Esta consulta trae todos los resultados de las dos tablas, trae los registros que coinciden con la condición y, además, los registros de las tablas de la izquierda y derecha.

nombre email fecha valor
Pedro ps@gmail.com 01/31/2018 254
Juan jg@gmail.com 02/02/2018 189
Lina ls@gmail.com 02/02/2018 125
Null Null 03/02/2018 100
Null Null 03/02/2018 125
Diego df@gmail.com Null Null
Paola pg@gmail.com Null Null

Como podemos ver, el uso de JOIN nos da muchas posibilidades para nuestras consultas, además de ser bastantes rápidas y sencillas de usar, una vez entiendes cómo funcionan.

Si quieres aprender más de consultas usando SQL puedes ver el curso de Fundamentos de Bases de Datos y el curso de SQL y MySQL.

Curso de SQL y MySQL 2018

Toma las primeras clases gratis

COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

0 Comentarios

para escribir tu comentario

Artículos relacionados