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.

SQL FULL OUTER JOIN

Características

  • Devuelve la unión de las dos tablas: Incluye todos los registros coincidentes y no coincidentes.
  • Relleno de registros no coincidentesNULL: 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 JOINContenido devuelto
INNER JOINLa parte de intersección de las dos tablas, registros coincidentes
LEFT JOINTodos los registros de la tabla izquierda, y los registros coincidentes de la tabla derecha
RIGHT JOINTodos los registros de la tabla derecha, y los registros coincidentes de la tabla izquierda
FULL OUTER JOINLa 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

SELECT Websites.name, access_log.count, access_log.date
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