Ir al contenido principal

Los Join

                                          Que son Los Joins

Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose en un campo común entre ellas, devolviendo por tanto datos de diferentes tablas. Un JOIN se produce cuando dos o más tablas se juntan en una sentencia SQL.

Existen más tipos de joins en SQL que los que aquí se explican, como CROSS JOIN, O SELF JOIN, pero no todos ellos están soportados por todos los sistemas de bases de datos. Los más importantes son los siguientes:

INNER JOIN: Devuelve todas las filas cuando hay al menos una coincidencia en ambas tablas.
LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda, y las filas coincidentes de la tabla de la derecha.
RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha, y las filas coincidentes de la tabla de la izquierda.
OUTER JOIN: Devuelve todas las filas de las dos tablas, la izquierda y la derecha. También se llama FULL OUTER JOIN.




Resultado de imagen para ejemplo de join





                                  INNER JOIN

INNER JOIN selecciona todas las filas de las dos columnas siempre y cuando haya una coincidencia entre las columnas en ambas tablas. Es el tipo de JOIN más común.

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

Se ve mas claro en esta imagen 

SQL INNER JOIN

Vamos a verlo en ejemplos  mediante las tablas de cliente y pedidos 

ClienteIDNombreClienteContacto
1Marco Lambert456443552
2Lydia Roderic445332221
3Ebbe Therese488982635
4Sofie Mariona412436773


PedidoIDClienteIDFactura
2344160
235248
236364
237492
                                  LEFT JOIN
LEFT JOIN mantiene todas las filas de la tabla izquierda (la tabla1). Las filas de la tabla derecha se mostrarán si hay una coincidencia con las de la izquierda. Si existen valores en la tabla izquierda pero no en la tabla derecha, ésta mostrará null.

SELECT nombreColumna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;
La representación de LEFT JOIN en una imagen es:

SQL LEFT JOIN

Tomando de nuevo las tablas de Productos y Pedidos, ahora queremos mostrar todos los clientes, y cualquier pedido que pudieran haber encargado:

SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes LEFT JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;
La sentencia anterior devolverá lo siguiente:

NombreCliente PedidoID
Ebbe Therese 236
Lydia Roderic 235
Marco Lambert (null)
Sofie Mariona 234
Sofie Mariona 237




                            RIGHT JOIN

 RIGHT JOIN
Es igual que LEFT JOIN pero al revés. Ahora se mantienen todas las filas de la tabla derecha (tabla2). Las filas de la tabla izquierda se mostrarán si hay una coincidencia con las de la derecha. Si existen valores en la tabla derecha pero no en la tabla izquierda, ésta se mostrará null.

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

La imagen que representa a RIGHT JOIN es:

SQL RIGHT JOIN

De nuevo tomamos el ejemplo de Clientes y Pedidos, y vamos a hacer el mismo ejemplo anterior, pero cambiado LEFT por RIGHT:

SELECT Pedidos.PedidoID, Clientes.NombreCliente
FROM Clientes RIGHT JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Pedidos.PedidoID;
Ahora van a aparecer todos los pedidos, y los nombres de los clientes que han realizado un pedido. Nótese que también se ha cambiado el orden, y se han ordenado los datos por PedidoID.

PedidoID NombreCliente
234 Sofie Mariona
235 Lydia Roderic
236 Ebbe Therese
237 Sofie Mariona

 OUTER JOIN
OUTER JOIN o FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (tabla1) y de la tabla derecha (tabla2). Combina el resultado de los joins LEFT y RIGHT. Aparecerá null en cada una de las tablas alternativamente cuando no haya una coincidencia.

SELECT nombreColumna(s)
FROM tabla1
OUTER JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;
La imagen que representa el OUTER JOIN es la siguiente:



SQL FULL OUTER JOIN


                         FULL OUTER JOIN
Vamos a obtener todas las filas de las tablas Clientes y Pedidos:

SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes OUTER JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;
La sentencia devolverá todos los Clientes y todos los Pedidos, si un cliente no tiene pedidos mostrará null en PedidoID, y si un pedido no tuviera un cliente mostraría null en NombreCliente (en este ejemplo no sería lógico que un Pedido no tuviera un cliente).

La sintaxis de OUTER JOIN o FULL OUTER JOIN no existen en MySQL, pero se puede conseguir el mismo resultado de diferentes formas, esta es una:

SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes
LEFT JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID

UNION

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


Comentarios

Entradas populares de este blog

Los Arreglos

Un arreglo  Puede definirse como un grupo o una colección finita, homogénea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos: De una dimensión. De dos dimensiones. De tres o más dimensiones. Tipos de arreglos Arreglos unidimensionales. Arreglos multidimensionales. Arreglo con múltiple subíndices. Arreglos unidimensionales Arreglos unidimensionales Es un tipo de datos estructurado que está formado de una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. Están formados por un conjunto de elementos de un mismo tipo de datos que se almacenan bajo un mismo nombre, y se diferencian por la posición que tiene cada elemento dentro del arreglo de datos. Al declarar un arreglo, se debe inicializar sus elementos antes de utilizarlos. Para declarar un arreglo tiene que indicar su tipo, un nombre único y la cantidad de elementos que va a contener. Arreglos m...