¿Cómo funciona Inner Join, Left Join, Right Join, y Full Join?

¿Cómo funciona Inner Join, Left Join, Right Join, y Full Join?

El lenguaje SQL sigue siendo el más usado para acceder a las bases de datos, por eso es vital que cualquier informático lo maneje de manera óptima.  En este artículo te explicaremos cómo y porqué usar la sentencia JOIN de una manera muy simple. Para empezar debes tener presente que JOIN es una de las operaciones más usadas e importantes en SQL, sin embargo puede ser difícil de entender al principio. Comencemos con su definición: JOIN es el proceso de tomar datos de varias tablas y colocarlos en una sola vista generada, en palabras mucho más simples con una secuencia  SQL JOIN logras combinar filas de dos o más tablas, en función de una columna relacionada entre ellas. 

Ahora bien, para que tengas una mejor idea de cómo funciona la secuencia JOIN debes tener primero claro la “Teoría de conjuntos” y así todo te resultará más fácil. A continuación te mostraremos un grafico explicando cómo se comportan los cuatro principales JOIN (INNER, LEFT, RIGHH Y FULL JOIN), según la Teoría de conjuntos y

Dba-Experts-JOIN

luego ya pasaremos a explicar uno por uno:

Dba-Experts-JOIN2

  • INNER JOIN: Es el JOIN  más usado, esta es la instrucción que devuelve únicamente aquellos registros o filas que tiene valores idénticos en las dos tablas. 

Su sintaxis es: 

  • SELECT nombreColumna(s)
  • FROM tabla1
  • INNER JOIN tabla2
  • ON tabla1.nombreColumna=table2.nombreColumna;

Ejemplo: Veremos cómo se ejecuta está sentencia con clientes y Pedidos:

TABLA 1 – CLIENTES

ID CLIENTE NOMBRE TELÉFONO
1 Andrea Palacios 437 58 96
2 Claudia Mena 579 12 45
3 Lina Gonzales 678 15 46
4 Sara Rojas 248 46 53
5 Valery Cuellar 496 59 45

 

TABLA 2 – PEDIDOS

ID PEDIDO  CLIENTE FECHA
125 3 22/06/2020
126 2 22/06/2020
127 4 23/06/2020
128 3 24/06/2020
129 2 26/06/2020

 

La sentencia SQL devolverá todos los clientes que realizaron algún pedido: 

  • SELECT Clientes.NombreCliente, Pedidos.PedidoID FROM Clientes
  • INNER JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID
  • ORDER BY Clientes.NombreCliente;

 

TABLA RESULTADO

CLIENTE PEDIDO
Claudia Mena 126
Claudia Mena 129
Lina Gonzales 125
Lina Gonzales 128
Sara Rojas 127

 

La tabla anterior fue el resultado que nuestra secuencia INNER JOIN nos arrojó, en ella podemos ver relacionados los clientes que realizaron algún pedido, tanto Claudia como Lina aparecen dos veces porque realizaron dos pedidos en días diferentes. Por otra parte vemos que Valery y Andrea no realizaron ningún pedido por eso no aparecen en nuestro resultado. 

LEFT JOIN: Se conoce como una combinación externa. En ella se obtienen todas las filas de la tabla izquierda, aunque no tengan correspondencia con la tabla de la derecha. Además también mostrará los registros que coinciden con la tabla de la derecha. Hay que tener presente que si existen valores en la tabla izquierda pero no en la tabla derecha, ésta mostrará “NULL”.

Su sintaxis es: 

  • SELECT nombreColumna(s)
  • FROM tabla1
  • LEFT JOIN tabla2
  • ON tabla1.nombreColumna=tabla2.nombreColumna;

Ejemplo: Ahora realizaremos la secuencia para mostrar a todos los clientes y los pedidos que han realizado

  • SELECT Clientes.NombreCliente, Pedidos.PedidoID
  • FROM Clientes LEFT JOIN Pedidos
  • ON Clientes.ClienteID=Pedidos.ClienteID
  • ORDER BY Clientes.NombreCliente;

 

TABLA RESULTADO

CLIENTE PEDIDO
Andrea Palacios Null
Claudia Mena 126
Claudia Mena 129
Lina Gonzales 125
Lina Gonzales 128
Sara Rojas 127
Valery Cuellar Null

 

En está tabla de resultado vemos que se muestran todas las filas de la tabla Clientes, que es la tabla de la izquierda, tantas veces como haya coincidencias con el lado derecho. Tanto Andrea como Valery no han realizado ningún pedido, por lo que se muestra Null. 

RIGHT JOIN: Esta secuencia es todo lo contrario a la anterior, en ella se obtienen todas las filas de la tabla de la derecha, aunque no tengan correspondencia con la tabla de la izquierda. Además también mostrará los registros que coinciden con la tabla izquierda.

Su sintaxis es: 

  • SELECT nombreColumna(s)
  • FROM tabla1
  • RIGHT JOIN tabla2
  • ON tabla1.nombreColumna=tabla2.nombreColumna;

Ejemplo: Mostraremos la secuencia usando las mismas tablas de clientes y pedidos, pero ahora van aparecer los pedidos y los nombres de los clientes que los han realizado. 

  • SELECT Pedidos.PedidoID, Clientes.NombreCliente
  • FROM Clientes RIGHT JOIN Pedidos
  • ON Clientes.ClienteID=Pedidos.ClienteID
  • ORDER BY Pedidos.PedidoID;

 

TABLA RESULTADO

PEDIDO CLIENTE
125 Lina Gonzales
126 Claudia Mena
127 Sara Rojas
128 Lina Gonzales
129 Claudia Mena

 

FULL JOIN: Esta secuencia combina las dos anteriores, devuelve todos los registros de las tablas de la izquierda (tabla 1) y la derecha (tabla 2). En los resultados en que no haya coincidencia también aparecerá “Null”.

Su sintaxis es: 

  • SELECT nombreColumna(s)
  • FROM tabla1
  • OUTER JOIN tabla2
  • ON tabla1.nombreColumna=tabla2.nombreColumna;

Ejemplo: Con la siguiente secuencia obtendremos todas las filas de las tablas de clientes y pedidos, si en caso dado algún cliente no tuviera pedido, aparecerá “Null”. 

  • SELECT Clientes.NombreCliente, Pedidos.PedidoID
  • FROM Clientes OUTER JOIN Pedidos
  • ON Clientes.ClienteID=Pedidos.ClienteID
  • ORDER BY Clientes.NombreCliente;

 

TABLA RESULTADO

ID CLIENTE NOMBRE TELEFONO ID PEDIDO FECHA
1 Andrea Palacios 437 58 96 NULL NULL
2 Claudia Mena 579 12 45 126 22/06/2020
2 Claudia Mena 579 12 45 129 26/06/2020
3 Lina Gonzales 678 15 46 125 22/06/2020
3 Lina Gonzales 678 15 46 128 24/06/2020
4 Sara Rojas 248 46 53 127 23/06/2020
5 Valery Cuellar 496 59 45 NULL NULL

 

Como pudimos ver, utilizar las secuencias de JOIN (INNER, LEFT, RICH Y FULL JOIN), es muy sencillo, solo necesitas práctica. 

cerrar