SQL FULL OUTER JOINPalabras clave
FULL OUTER JOIN es un tipo de combinación en SQL que se utiliza para conservar todos los registros de ambas tablas, incluso si una de las partes no tiene coincidencias.
El resultado de FULL OUTER JOIN incluye los registros que cumplen la condición en ambas tablas (parte de intersección) así como los registros que no la cumplen (parte no intersección de la unión). Si un registro existe en una tabla pero no tiene coincidencia en la otra, las columnas faltantes de dicho registro se rellenan con NULL.
La palabra clave FULL OUTER JOIN devuelve filas siempre que exista una coincidencia en una de las tablas, ya sea la tabla izquierda (table1) o la tabla derecha (table2).
La palabra clave FULL OUTER JOIN combina los resultados de LEFT JOIN y RIGHT JOIN.
Sintaxis de SQL FULL OUTER JOIN
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;
- table1、table2: Las dos tablas que deben combinarse.
- ON table1.column_name=table2.column_name: Especifica la condición de combinación, normalmente el campo común de las dos tablas.
- column_name(s) : Selecciona los campos necesarios de las dos tablas.

Características
- Devuelve la unión de las dos tablas: Incluye todos los registros coincidentes y no coincidentes.
- Relleno de registros no coincidentes
NULL: Si un registro no tiene coincidencia en una tabla, sus campos correspondientes se representan conNULLNULL. - Equivalencia:
FULL OUTER JOINincluyeLEFT JOINyRIGHT JOINel resultado de.
Supongamos que hay dos tablas:StudentsyCourses。
Tabla Students:
| StudentID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Tabla Courses:
| CourseID | StudentID | CourseName |
|---|---|---|
| 101 | 1 | Math |
| 102 | 2 | Science |
| 103 | 4 | History |
Consulta usando FULL OUTER JOIN
SELECT Students.StudentID, Students.Name, Courses.CourseName FROM Students FULL OUTER JOIN Courses ON Students.StudentID = Courses.StudentID;
Resultado de la consulta:
| StudentID | Name | CourseName |
|---|---|---|
| 1 | Alice | Math |
| 2 | Bob | Science |
| 3 | Charlie | NULL |
| 4 | NULL | History |
Explicación:
StudentID = 1y2Es la parte de intersección; ambas tablas tienen datos.StudentID = 3existe enStudentstabla, pero enCoursestabla no hay coincidencia,CourseNamela columna esNULL。StudentID = 4existe enCoursestabla, pero enStudentstabla no hay coincidencia,Namela columna esNULL。
Resumen
| Tipo de JOIN | Contenido devuelto |
|---|---|
INNER JOIN | La parte de intersección de las dos tablas, registros coincidentes |
LEFT JOIN | Todos los registros de la tabla izquierda, y los registros coincidentes de la tabla derecha |
RIGHT JOIN | Todos los registros de la tabla derecha, y los registros coincidentes de la tabla izquierda |
FULL OUTER JOIN | La parte de unión de las dos tablas, incluye registros coincidentes y no coincidentes |
Base de datos de demostración
En este tutorial, usaremos la base de datos de muestra EJEMPLO.
A continuación se muestran los datos seleccionados de la tabla "Websites":
+----+--------------+---------------------------+-------+---------+ | id | name | url | alexa | country | +----+--------------+---------------------------+-------+---------+ | 1 | Google | https://www.google.cm/ | 1 | USA | | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN | | 3 | Ejemplo | http://www.example.com/ | 4689 | CN | | 4 | 微博 | http://weibo.com/ | 20 | CN | | 5 | Facebook | https://www.facebook.com/ | 3 | USA | | 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND | +----+---------------+---------------------------+-------+---------+
A continuación se muestran los datos de la tabla de registros de acceso al sitio web "access_log":
+-----+---------+-------+------------+ | aid | site_id | count | date | +-----+---------+-------+------------+ | 1 | 1 | 45 | 2016-05-10 | | 2 | 3 | 100 | 2016-05-13 | | 3 | 1 | 230 | 2016-05-14 | | 4 | 2 | 10 | 2016-05-14 | | 5 | 5 | 205 | 2016-05-14 | | 6 | 4 | 13 | 2016-05-15 | | 7 | 3 | 220 | 2016-05-15 | | 8 | 5 | 545 | 2016-05-16 | | 9 | 3 | 201 | 2016-05-17 | +-----+---------+-------+------------+ 9 rows in set (0.00 sec)
Ejemplo de SQL FULL OUTER JOIN
La siguiente instrucción SQL selecciona todos los registros de acceso al sitio web.
MySQL no admite FULL OUTER JOIN; puedes probar el siguiente ejemplo en SQL Server.
Ejemplo
FROM Websites
FULL OUTER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
Nota:La palabra clave FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (Websites) y de la tabla derecha (access_log). Si una fila de la tabla "Websites" no tiene coincidencia en "access_log", o una fila de la tabla "access_log" no tiene coincidencia en "Websites", también se listan dichas filas.
Otras extensiones