Ir al contenido principal
Documentos
Funciones de cadenaDesencadenaBases de datosFunciones JSONFunciones matemáticasFunciones de fechaÍndicesSintaxis básicaGestión de Tablas y Esquemas

PostgreSQL FULL JOIN

El `FULL JOIN` de PostgreSQL combina los resultados del `LEFT JOIN` y del `RIGHT JOIN`. Devuelve todos los registros cuando hay una coincidencia en los registros de la tabla izquierda o derecha, y rellena los `NULL` cuando no hay coincidencia.

Utilización

El `FULL JOIN` se utiliza cuando quieres recuperar todos los registros de dos tablas e incluir filas sin coincidencias directas en ninguna de las tablas. Es especialmente útil para conjuntos de datos con registros que pueden no tener coincidencias correspondientes en la otra tabla.

sql
SELECT columns
FROM table1
FULL JOIN table2 ON table1.common_column = table2.common_column;

En esta sintaxis, `FULL JOIN` combina filas de `tabla1` y `tabla2` basándose en una columna compartida, incluyendo las filas no coincidentes de ambas tablas.

Ejemplos

1. JUNTA COMPLETA básica

sql
SELECT *
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id;

Este ejemplo recupera todos los registros de las tablas `employees` y `departments`, los empareja por `dept_id` e `id`, y rellena con `NULLs` las filas no emparejadas.

2. Utilizar FULL JOIN con WHERE

sql
SELECT employees.name, departments.name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id
WHERE departments.name IS NOT NULL;

Esta consulta combina `FULL JOIN` con una cláusula `WHERE` para filtrar los resultados en los que el nombre del departamento es `NULL`, mostrando cómo refinar los resultados después de la unión.

3. FULL JOIN con agregación

sql
SELECT employees.dept_id, COUNT(employees.id) AS employee_count, departments.name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id
GROUP BY employees.dept_id, departments.name;

Este ejemplo utiliza `FULL JOIN` con `GROUP BY` para agregar datos, proporcionando un recuento de empleados por departamento, incluyendo los departamentos sin empleados.

4. Manejo de valores nulos

sql
SELECT COALESCE(employees.name, 'No Employee') AS employee_name, 
       COALESCE(departments.name, 'No Department') AS department_name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id;

Este ejemplo muestra cómo tratar valores `NULL` utilizando `COALESCE` para proporcionar valores por defecto para las filas no coincidentes.

Comparación de los tipos de JOIN

  • JOIN IZQUIERDO: Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha. Los registros no coincidentes de la tabla correcta se rellenan con `NULL`.
  • JOIN DERECHO: Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda. Los registros no coincidentes de la tabla de la izquierda se rellenan con "NULL".
  • JOIN COMPLETO: Devuelve todos los registros de ambas tablas, rellenando con `NULL` las filas no coincidentes de cualquiera de las tablas.

Consejos y buenas prácticas

  • Utilízalo con precaución con conjuntos de datos grandes. El `FULL JOIN` puede producir grandes conjuntos de resultados, así que asegúrate de que es necesario para tu análisis.
  • Maneja los valores `NULL`. Prepárate para gestionar valores `NULL` en tu lógica, especialmente al realizar cálculos o filtrar resultados.
  • Optimiza con índices. Garantiza una indexación adecuada de las columnas de unión para mejorar el rendimiento.
  • Combínalo con otros filtros. Utiliza cláusulas "DONDE" para filtrar más los resultados y reducir el tamaño del conjunto de resultados.
  • Prueba en subconjuntos. Valida la lógica en muestras de datos más pequeñas antes de aplicar `FULL JOIN` a tablas completas.
  • Consideraciones sobre el rendimiento. Ten en cuenta que el `FULL JOIN` en tablas muy grandes puede provocar un tiempo de procesamiento y un uso de recursos significativos.
  • Considera alternativas. En algunos casos, utilizar `LEFT JOIN` o `RIGHT JOIN` puede ser más apropiado en función de los requisitos específicos de tu consulta.