04.-LEFT JOIN
La cláusula LEFT JOIN
une una tabla izquierda con la tabla derecha y devuelve las filas de la tabla izquierda que pueden o no tener filas correspondientes en la tabla derecha.
La cláusula LEFT JOIN
puede ser útil para seleccionar filas de una tabla que no tienen filas coincidentes en otra.
Esta es la sintaxis básica de la cláusula LEFT JOIN
:
SELECT
seleccionar_lista
FROM
tabla1
LEFT JOIN tabla2
ON tabla1.nombre_columna = tabla2.nombre_columna;
En esta sintaxis
- En primer lugar, especifique las columnas de ambas tablas en la lista de selección (
select_list
) de la cláusulaSELECT
. - En segundo lugar, especifique la tabla izquierda (
table1
) de la que desea seleccionar los datos en la cláusulaFROM
. - En tercer lugar, especifique la tabla derecha (
table2
) a la que desea unirse mediante la palabra claveLEFT JOIN
. - Por último, defina una condición para la unión (
nombre_columna1 = nombre_columna2
), que indica que la columna (nombre_columna
) de cada tabla debe tener valores coincidentes.
Cómo funciona LEFT JOIN¶
La cláusula LEFT JOIN
comienza seleccionando los datos de la tabla izquierda (table1
). Para cada fila de la tabla izquierda, compara el valor de nombre_columna
con el valor de la columna correspondiente de cada fila de la tabla derecha.
Cuando estos valores son iguales, la cláusula join izquierda genera una nueva fila que incluye las columnas que aparecen en la select_list
y la añade al conjunto de resultados.
Si estos valores no son iguales, la cláusula LEFT JOIN
crea una nueva fila que incluye las columnas especificadas en la cláusula SELECT
. Además, rellena con NULL las columnas que provienen de la tabla de la derecha.
Tenga en cuenta que LEFT JOIN
también se denomina LEFT OUTER JOIN
.
Si las columnas para unir dos tablas tienen el mismo nombre, puede utilizar la sintaxis USING
:
SELECT
select_list
FROM
table1
LEFT JOIN table2 USING (column_name);
El siguiente diagrama de Venn ilustra cómo funciona la cláusula LEFT JOIN
:
Ejemplos de LEFT JOIN en PostgreSQL¶
Veamos las siguientes tablas film
e inventory
de la base de datos de ejemplo.
Cada fila de la tabla film
puede corresponder a cero o múltiples filas de la tabla inventory
.
A la inversa, cada fila de la tabla inventario
tiene una y sólo una fila en la tabla película
.
El vínculo entre las tablas film
e inventory
se establece a través de la columna film_id
.
1) Ejemplos básicos de LEFT JOIN en PostgreSQL¶
La siguiente sentencia utiliza la cláusula LEFT JOIN
para unir la tabla film
con la tabla inventory
:
SELECT
film.film_id,
film.title,
inventory.inventory_id
FROM
film
LEFT JOIN inventory ON inventory.film_id = film.film_id
ORDER BY
film.title;
Cuando una fila de la tabla film
no tiene una fila coincidente en la tabla inventory
, el valor de la columna inventory_id
de esta fila es NULL
.
La siguiente sentencia utiliza alias de tablas y la cláusula LEFT JOIN
para unir las tablas film
e inventory
:
SELECT
f.film_id,
f.title,
i.inventory_id
FROM
film f
LEFT JOIN inventory i ON i.film_id = f.film_id
ORDER BY
i.inventory_id;
Dado que las tablas film
e inventory
comparten la misma columna film_id
, puede utilizar la sintaxis USING
:
SELECT
f.film_id,
f.title,
i.inventory_id
FROM
film f
LEFT JOIN inventory i USING (film_id)
ORDER BY
i.inventory_id;
2) Uso de PostgreSQL LEFT JOIN con cláusula WHERE¶
A continuación se utiliza la cláusula LEFT JOIN
para unir las tablas inventory
y film
. Incluye una cláusula WHERE
que identifica las películas que no están presentes en el inventario:
SELECT
f.film_id,
f.title,
i.inventory_id
FROM
film f
LEFT JOIN inventory i USING (film_id)
WHERE
i.film_id IS NULL
ORDER BY
f.title;
Salida:
film_id | title | inventory_id
---------+------------------------+--------------
14 | Alice Fantasia | null
33 | Apollo Teen | null
36 | Argonauts Town | null
38 | Ark Ridgemont | null
41 | Arsenic Independence | null
...
Resumen¶
- Utilice la cláusula
LEFT JOIN
de PostgreSQL para seleccionar filas de una tabla que pueden o no tener filas correspondientes en otras tablas.