Está en la página 1de 19

Unidad 4: Recuperación de

Información en Ambientes de BDD


4.5 Métodos de Ejecución del
JOIN
Los JOINS en SQL nos sirven para combinar filas provenientes de dos o
más tablas, basándose en un campo en común entre ellas, devolviendo
así datos de diferentes tablas.
Existen diferentes tipos de JOINs en SQL, pero solo abordaremos 4, ya
que algunos no son soportados por todos los motores de BD. 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.
INNER JOIN
Este JOIN lo que hace es seleccionar todas las filas de dos columnas,
siempre y cuando se cumpla una coincidencia entre las columnas de
ambas tablas. Este es el JOIN que más se utiliza.
SELECT nombreColumna(s)
FROM tabla1
INNER JOIN tabla2
ON tabla1.nombreColumna=table2.nombreColumna;
INNER JOIN
INNER JOIN
En un ejemplo real, supongamos que tenemos las tablas Clientes y
Pedidos con la siguiente información:
INNER JOIN
La siguiente consulta nos devolverá a todos los clientes con pedidos:
SELECT Clientes.NombreCliente, Pedidos.PedidoID FROM Clientes
INNER JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;

Los clientes que no tienen pedidos, no aparecerán.


LEFT JOIN
En este, se mantienen todas las filas de la tabla izquierda (tabla 1). Y las
filas de la derecha se mostrarán si hay una coincidencia cono la de la
izquierda. Si existieran valores en la tabla izquierda pero no en la tabla
derecha, esta mostrará null.
SELECT nombreColumna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;
LEFT JOIN
LEFT JOIN
Tomando de referencia las tablas mencionadas anteriormente, lanzar la
siguiente consulta y observe los resultados:
SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes LEFT JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;
RIGHT JOIN
Como bien te has de imaginar, es igual que LEFT JOIN, pero al revés. En
este se mantienen los valores de la tabla de la derecha (tabla 2). Las
filas de la izquierda se mostrarán si hay una coincidencia con las de la
derecha. Y de igual forma, en caso de existir valores en la tabla derecha
pero no en la tabla izquierda, estos se mostrarán null.
SELECT nombreColumna(s)
FROM tabla1
RIGHT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;
RIGHT JOIN
RIGHT JOIN
De nuevo tomamos de referencia las tablas Clientes y Pedidos.
Lanzamos la consulta como la anterior, pero ahora cambiamos LEFT por
RIGHT:
SELECT Pedidos.PedidoID, Clientes.NombreCliente
FROM Clientes RIGHT JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Pedidos.PedidoID;

¿Qué pasó?
OUTER JOIN
El OUTER JOIN o FULL OUTER JOIN devolverá todas las filas de la tabla
izquierda (tabla 1) y de la tabla derecha (tabla 2). Combinando 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;
OUTER JOIN
OUTER JOIN
De nuevo, usamos las tablas Clientes y Pedidos:
SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes OUTER JOIN Pedidos
ON Clientes.ClienteID=Pedidos.ClienteID
ORDER BY Clientes.NombreCliente;
Esta consulta devolverá todos los Clientes y todos los Pedidos, en caso
de que un cliente no tenga pedidos, mostrará null en PedidoID, y si un
pedido no tuviera un cliente, mostraría null en NombreCliente.
OUTER JOIN
La sintaxis OUTER JOIN o FULL OUTER JOIN no existe en MySQL, pero se
puede conseguir lo mismo como se muestra a continuación:
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;
Extra, para analizar.

También podría gustarte