Actualizado el miércoles, 17 abril, 2024
En las bases de datos relacionales, la tarea de recuperar los datos de varias tablas es extremadamente común. Dependiendo del resultado de destino, esto implica unir varias tablas en una sola unidad y obtener los datos resultantes.
Cuando se trata de uniones, la mayoría de nosotros trabajamos principalmente con el límite de dos tablas y demás. Sin embargo, es común que sea necesario unir tres tablas para obtener un diseño de datos y una visión más significativos. Tomemos, por ejemplo, el caso en el que desea recuperar una lista de películas, su inventario de alquiler correspondiente y los detalles reales del alquiler. Cada una de estas unidades, como las películas, el inventario y los detalles de alquiler, se encuentran en tablas individuales.
En este tutorial, le guiaremos a través de las diversas combinaciones y técnicas que puede utilizar para unir tres tablas en SQL.
Requisitos:
Para fines de demostración, usaremos la versión 80 de MySQL y la base de datos de muestra Sakila. Para seguirlo, puede descargar y configurar la base de datos Sakila en su servidor MySQL. Siéntase libre de utilizar cualquier otro conjunto de datos que considere aplicable.
Tipos de Join en SQL
Antes de llegar a la aplicación de las combinaciones, comencemos discutiendo los diversos tipos de combinaciones que están disponibles en las bases de datos SQL.
INNER JOIN / UNIÓN INTERNA
El primer tipo de unión es una INNER JOIN. Este tipo de combinación devuelve solo las filas que contienen un valor coincidente en ambas tablas. Es un tipo de unión muy común y es el más simplista a la hora de unir dos tablas.
La sintaxis es la siguiente:Columnas
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
LEFT JOIN / UNIÓN IZQUIERDA
En el caso de LEFT JOIN, devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. Si no hay valores coincidentes de la tabla correcta, la combinación agrega los valores NULL en su lugar.
La sintaxis es la siguiente:
SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
RIGHT JOIN / UNIÓN A LA DERECHA
Como puedes adivinar, la UNIÓN DERECHA es lo opuesto a la UNIÓN IZQUIERDA. Este tipo de combinaciones devuelve todas las filas de la tabla de la derecha y solo las filas coincidentes de la tabla de la izquierda. Si no hay filas coincidentes en la tabla de la izquierda, la combinación le agrega los valores NULL.
A continuación se muestra la sintaxis de una RIGHT JOIN:
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
FULL OUTER JOIN / UNIÓN EXTERNA COMPLETA
El siguiente tipo de combinación que encontrará en las bases de datos SQL es una combinación externa completa. Este tipo de combinación devuelve todas las filas cuando hay una coincidencia en las tablas derecha o izquierda. Si no hay ningún valor coincidente en ninguno de los dos, devuelve NULL para las columnas de la tabla sin la coincidencia.
A continuación se muestra la sintaxis de una combinación externa completa:
SELECT columns
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Es bueno tener en cuenta que no todos los motores de base de datos admiten FULL OUTER JOINS. Para lograrlo, es posible que deba trabajar con otros tipos de JOINS o subconsultas.
Ejemplos:
Exploremos algunos ejemplos sobre cómo podemos usar estos tipos de uniones para unir tres tablas en SQL.
Ejemplo 1: Uso de INNER JOIN
Comenzamos con una UNIÓN INTERNA. Supongamos que queremos recuperar una lista de películas, el inventario de alquiler y los detalles de alquiler correspondientes.
Podemos usar múltiples INNER JOINS en las tablas asociadas, como se muestra en el siguiente ejemplo:
SELECT
film.title,
inventory.inventory_id,
rental.rental_date
FROM
film
INNER JOIN inventory ON
film.film_id = inventory.film_id
INNER JOIN rental ON
inventory.inventory_id = rental.inventory_id;
En la consulta de ejemplo dada, comenzamos uniendo las tablas de película e inventario en función de la columna «film_id». A continuación, tomamos el conjunto resultante y lo unimos a la tabla de alquiler basada en la columna «inventory_id».
Esto asegura que unimos tres tablas con un INNER JOIN básico. El conjunto resultante es el siguiente:
Ejemplo 2: Uso de INNER JOIN y LEFT JOIN
Digamos que ahora queremos la lista de películas, la lista de inventarios de alquiler (si los hay) y los detalles de alquiler asociados.
También queremos asegurarnos de que, incluso si una película no tiene un inventario de alquiler, la incluyamos en el resultado. Aquí es donde entran en juego INNER JOIN y LEFT JOIN.
Considere el siguiente ejemplo:
SELECT
film.title,
inventory.inventory_id,
rental.rental_date
FROM
film
INNER JOIN inventory ON
film.film_id = inventory.film_id
LEFT JOIN rental ON
inventory.inventory_id = rental.inventory_id;
En este ejemplo, usamos un INNER JOIN para unir la película y la tabla de inventario para asegurarnos de que obtenemos los títulos con el inventario disponible. A continuación, usamos LEFT JOIN para unir la tabla de alquiler para obtener los detalles del alquiler si están disponibles y NULL para cualquier título que no tenga un historial de alquiler.
El conjunto resultante es el siguiente:
Conclusión
En este tutorial, aprendimos sobre los diversos tipos de JOINS en SQL, cómo funcionan y cómo podemos usarlos para combinar tres tablas.