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
luego ya pasaremos a explicar uno por uno:
- 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.