Introducción
En SQL, un FULL OUTER JOIN
es una operación que combina los resultados de un LEFT JOIN
y un RIGHT JOIN
. Esto significa que devuelve todas las filas cuando hay una coincidencia en una de las tablas, y también las filas que no tienen coincidencia en ambas tablas. Si no hay coincidencia, los resultados contendrán NULL
en las columnas de la tabla que no tiene coincidencia.
Sintaxis
La sintaxis básica para un FULL OUTER JOIN
es la siguiente:
SELECT column1, column2, ... FROM table1 FULL OUTER JOIN table2 ON table1.common_column = table2.common_column;
Ejemplo Práctico
Supongamos que tenemos dos tablas, employees
y departments
, con los siguientes datos:
Tabla employees
employee_id | name | department_id |
---|---|---|
1 | Alice | 10 |
2 | Bob | 20 |
3 | Charlie | 30 |
4 | David | NULL |
Tabla departments
department_id | department_name |
---|---|
10 | HR |
20 | IT |
40 | Marketing |
Queremos obtener una lista de todos los empleados y departamentos, incluyendo aquellos empleados que no están asignados a ningún departamento y aquellos departamentos que no tienen empleados.
Consulta SQL
SELECT employees.employee_id, employees.name, departments.department_name FROM employees FULL OUTER JOIN departments ON employees.department_id = departments.department_id;
Resultado
employee_id | name | department_name |
---|---|---|
1 | Alice | HR |
2 | Bob | IT |
3 | Charlie | NULL |
4 | David | NULL |
NULL | NULL | Marketing |
Explicación del Resultado
- Alice y Bob tienen coincidencias en ambas tablas, por lo que se muestran con sus respectivos departamentos.
- Charlie y David no tienen coincidencias en la tabla
departments
, por lo que sus columnas dedepartment_name
sonNULL
. - El departamento de Marketing no tiene coincidencias en la tabla
employees
, por lo que sus columnas deemployee_id
yname
sonNULL
.
Ejercicio Práctico
Ejercicio
Dadas las siguientes tablas students
y courses
, escribe una consulta que utilice FULL OUTER JOIN
para listar todos los estudiantes y cursos, incluyendo aquellos estudiantes que no están inscritos en ningún curso y aquellos cursos que no tienen estudiantes inscritos.
Tabla students
student_id | student_name |
---|---|
1 | John |
2 | Jane |
3 | Mike |
Tabla courses
course_id | course_name |
---|---|
101 | Math |
102 | Science |
103 | History |
Solución
SELECT students.student_id, students.student_name, courses.course_name FROM students FULL OUTER JOIN courses ON students.student_id = courses.course_id;
Resultado Esperado
student_id | student_name | course_name |
---|---|---|
1 | John | NULL |
2 | Jane | NULL |
3 | Mike | NULL |
NULL | NULL | Math |
NULL | NULL | Science |
NULL | NULL | History |
Conclusión
El FULL OUTER JOIN
es una herramienta poderosa para combinar datos de dos tablas, asegurando que se incluyan todas las filas de ambas tablas, independientemente de si hay coincidencias. Esto es especialmente útil en situaciones donde necesitas un conjunto de datos completo, incluso si algunas relaciones no existen. Asegúrate de practicar con diferentes conjuntos de datos para familiarizarte con cómo funciona y cómo puede ser útil en tus consultas SQL.
Curso de SQL
Módulo 1: Introducción a SQL
Módulo 2: Consultas básicas de SQL
- Instrucción SELECT
- Filtrando datos con WHERE
- Ordenando datos con ORDER BY
- Limitando resultados con LIMIT
Módulo 3: Trabajando con múltiples tablas
Módulo 4: Filtrado avanzado de datos
- Usando LIKE para coincidencia de patrones
- Operadores IN y BETWEEN
- Valores NULL y IS NULL
- Agregando datos con GROUP BY
- Cláusula HAVING
Módulo 5: Manipulación de datos
Módulo 6: Funciones avanzadas de SQL
Módulo 7: Subconsultas y consultas anidadas
- Introducción a subconsultas
- Subconsultas correlacionadas
- EXISTS y NOT EXISTS
- Usando subconsultas en cláusulas SELECT, FROM y WHERE
Módulo 8: Índices y optimización de rendimiento
- Entendiendo los índices
- Creación y gestión de índices
- Técnicas de optimización de consultas
- Análisis del rendimiento de consultas
Módulo 9: Transacciones y concurrencia
- Introducción a las transacciones
- Propiedades ACID
- Instrucciones de control de transacciones
- Manejo de concurrencia