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.