English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Instrucción SQL FULL JOIN

En este tutorial, aprenderás cómo utilizar SQL Full Join para recuperar datos de dos tablas.

usar unión completa

FULL JOIN devuelve todas las filas de las tablas de unión, independientemente de si coinciden, es decir, la unión completa combina LEFT JOINyRIGHT JOINLa unión completa esuna función de unión externapor lo que también se conoce comofull outer join.

El diagrama de Venn siguiente ilustra cómo funciona la unión completa.

Nota:Una unión externa es una unión que incluye filas en el resultado, incluso si las filas de las dos tablas a unir pueden no coincidir.

Para entender esto claramente, veamos lo siguienteemployeesydepartmentsTabla.

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+
Tabla: employees
Tabla: departments

Ahora, supongamos que solo desea recuperar los nombres de todos los empleados y los nombres de los departamentos disponibles, sin importar si tienen una línea correspondiente en otra tabla, en este caso, puede usar la unión completa, como se muestra a continuación.

Las siguientes instrucciones conectan las tablas employee y department utilizando el campo de dept_id común para recuperar todos los detalles de los departamentos y empleados.

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 FULL JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Algunas bases de datos (por ejemplo, Oracle, MySQL) no admiten la unión completa. En este caso, puede usar el operador UNION ALL para combinar LEFT JOIN y RIGHT JOIN, como se muestra a continuación:

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
UNION ALL
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Ejecutar el comando anterior, obtendrá la siguiente salida:

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|   NULL | NULL         | NULL       | Customer Service |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      5 | Martin Blank | 2008-06-24 | NULL             |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      4 | Rick Deckard | 2007-01-03 | Finance          |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      3 | Sarah Connor | 2005-10-18 | Sales            |
|      2 | Tony Montana | 2002-07-15 | Administration   |
|      2 | Tony Montana | 2002-07-15 | Administration   |
+--------+--------------+------------+------------------+

Como puede ver, los resultados incluyendepartmentsyemployeesTodas las filas de la tabla.

Consejo:En una consulta de unión, la tabla izquierda es la que aparece más a la izquierda en la cláusula JOIN, y la tabla derecha es la que aparece más a la derecha en la cláusula.

Nota:Al ejecutar una unión externa, si el DBMS (sistema de gestión de bases de datos) no puede coincidir con ninguna fila, colocará NULL en la columna para indicar que los datos no existen.