- 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.
1. 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 Clientes.NombreCliente, Pedidos.PedidoID FROM Clientes
INNER JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;
Si hay filas en Clientes que no tienen coincidencias en Pedidos, los Clientes no se mostrarán.
***********NombreCliente | PedidoID |
Ebbe Therese | 236 |
Lydia Roderic | 235 |
Sofie Mariona | 234 |
Sofie Mariona | 237 |
Sofie Mariona aparece dos veces ya que ha realizado dos pedidos. No aparece Marco Lambert, pues no ha realizado ningún pedido.
2. 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 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 |
3. 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 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 |
otro ejemplo usando una misma tabla Category para listar la cateroria y su padre, referenciado en el campo category_id
con inner join
select cate.name as categoria, catePadre.name as categoria_padre
from category cate, category catePadre
where cate.category_id=catePAdre.id;
categoria | categoria_padre |
---|---|
bolsones de tierra | bolsones |
fideos | comestibles |
caldos y sopas | comestibles |
con left join
select cate.name as categoria, catePadre.name as categoria_padre
from category cate left join category catePadre
from category cate left join category catePadre
on cate.category_id=catePAdre.id
categoria | categoria_padre |
---|---|
bolsones | null |
Artículos de librería | null |
dulces y mermeladas | null |
bolsones de tierra | bolsones |
comestibles | null |
fideos | comestibles |
caldos y sopas | comestibles |
con right join
select cate.name as categoria, catePadre.name as categoria_padre
from category cate right join category catePadre
on cate.category_id=catePAdre.id
categoria | categoria_padre |
---|---|
bolsones de tierra | bolsones |
null | Artículos de librería |
null | dulces y mermeladas |
null | bolsones de tierra |
fideos | comestibles |
caldos y sopas | comestibles |
null | fideos |
null | caldos y sopas |
No hay comentarios:
Publicar un comentario