
Resumen: en este tutorial, aprenderás a usar FULL OUTER JOIN de SQL Server para consultar datos de dos o más tablas.
Introducción a FULL OUTER JOIN de SQL Server
FULL OUTER JOIN devuelve un conjunto de resultados que incluye filas de las tablas izquierda y derecha. Cuando no existen filas coincidentes para la fila de la tabla de la izquierda, las columnas de la tabla de la derecha tendrán nulos. De manera similar, cuando no existen filas coincidentes para la fila de la tabla de la derecha, la columna de la tabla de la izquierda tendrá nulos, otras cláusulas que puedes utilizar para hacer combinaciones entre tablas son INNER JOIN, LEFT JOIN y RIGHT JOIN.
A continuación, se muestra la un SELECT usando FULL OUTER JOIN al unir dos tablas T1 y T2:
SELECT
select_list
FROM
T1
FULL OUTER JOIN T2 ON join_predicate;
La palabra clave OUTER es opcional, por lo que puedes omitirla como se muestra en la siguiente consulta:
SELECT
select_list
FROM
T1
FULL JOIN T2 ON join_predicate;
En esta sintaxis:
- Primero, se especifica la tabla izquierda T1 en la cláusula FROM.
- En segundo lugar, se especifica la tabla T2 de la derecha y un predicado de combinación.
El siguiente diagrama de Venn ilustra FULL OUTER JOIN de dos conjuntos de resultados:
Ejemplo de full outer join de SQL Server
Configuremos una tabla de muestra para demostrar cómo se usa la full outer join.
Primero, crea un nuevo esquema llamado pm que significa project managements (gestión de proyectos).
CREATE SCHEMA pm;
GO
A continuación, crea nuevas tablas denominadas projects (proyectos) y (members) miembros en el esquema pm:
CREATE TABLE pm.projects(
id INT PRIMARY KEY IDENTITY,
title VARCHAR(255) NOT NULL
);
CREATE TABLE pm.members(
id INT PRIMARY KEY IDENTITY,
name VARCHAR(120) NOT NULL,
project_id INT,
FOREIGN KEY (project_id)
REFERENCES pm.projects(id)
);
Supongamos que cada miembro solo puede participar en un proyecto y cada proyecto tiene cero o más miembros. Si un proyecto está en la fase de idea, no hay ningún miembro asignado.
Ahora, con la idea anterior inserta algunas filas en las tablas de proyectos y miembros:
INSERT INTO
pm.projects(title)
VALUES
('New CRM Estrada Web Group'),
('ERP EWG'),
('Develop Mobile Sales Platform');
INSERT INTO
pm.members(name, project_id)
VALUES
('John Doe', 1),
('Lily Bush', 1),
('Jane Doe', 2),
('Jack Daniel', null);
Después de eso, consulta los datos de las tablas de proyectos y miembros:
SELECT * FROM pm.projects;
Resultado:
SELECT * FROM pm.members;
Resultado:
Finalmente, usa FULL OUTER JOIN para consultar los datos de las tablas proyectos y de miembros:
SELECT
m.name member,
p.title project
FROM
pm.members m
FULL OUTER JOIN pm.projects p
ON p.id = m.project_id;
Resultado:
En este ejemplo, la consulta devolvió miembros que participan en proyectos, miembros que no participan en ningún proyecto y proyectos que no tienen ningún miembro.
Para encontrar los miembros que no participan en ningún proyecto y proyectos que no tienen miembros, agrega una cláusula WHERE y NULL a la consulta anterior:
SELECT
m.name member,
p.title project
FROM
pm.members m
FULL OUTER JOIN pm.projects p
ON p.id = m.project_id
WHERE
m.id IS NULL OR
P.id IS NULL;
Resultado:
Como se muestra claramente en el resultado, Jack Daniel no participa en ningún proyecto y Develop Mobile Sales Platform no tiene miembros.
En este tutorial, has aprendido a usar full outer join de SQL Server para consultar datos de dos o más tablas.