Saltar a contenido

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áusula SELECT.
  • En segundo lugar, especifique la tabla izquierda (table1) de la que desea seleccionar los datos en la cláusula FROM.
  • En tercer lugar, especifique la tabla derecha (table2) a la que desea unirse mediante la palabra clave LEFT 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:

PostgreSQL Join - Left Join

Ejemplos de LEFT JOIN en PostgreSQL

Veamos las siguientes tablas film e inventory de la base de datos de ejemplo.

Film and Inventory tables

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;

PostgreSQL LEFT JOIN example

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.