🧚 ¡Oye! Beekeeper Studio es una GUI de bases de datos rápida, moderna y de código abierto Descarga
2 de enero de 2024 Por Matthew Rathbone

Entender SQL muchas veces se trata de hacer las preguntas correctas. Cuando trabajas con datos repartidos en varias tablas, la operación full outer join resulta muy útil. Aunque es bastante común en algunos sistemas de gestión de bases de datos, el concepto de FULL OUTER JOIN es un poco más complicado en MySQL. ¿Por qué? Porque no está soportado de forma nativa. Interesante, ¿no? Pero espera, ¡hay una solución alternativa!

En este tutorial vamos a explorar a detalle cómo implementar un full outer join en MySQL. Abróchate el cinturón: estamos a punto de sumergirnos en un montón de ejemplos de código.

🔖 Referencia rápida: ¿Necesitas consultar rápido todos los tipos de JOIN? Revisa nuestra guía rápida de SQL JOIN con diagramas visuales y ejemplos de código.

¿Qué es un Full Outer Join?

Antes de empezar, definamos qué es un FULL OUTER JOIN. En SQL, un full outer join combina el efecto de aplicar un left outer join y un right outer join. En otras palabras, obtiene los registros que tienen valores coincidentes en ambas tablas, además de todos los registros de ambas tablas cuyos valores no aparecen en la otra tabla.

Visualización de Full Outer Join

Veamos un ejemplo. Supongamos que tenemos dos tablas, Employees y Departments.

Tabla Employees:

id name
1 Alice
2 Bob
3 Charlie

Tabla Departments:

id department
2 HR
3 IT
4 Marketing

Usando la consulta FULL OUTER JOIN:

SELECT * FROM Employees
FULL OUTER JOIN Departments ON Employees.id = Departments.id;

El conjunto de resultados será:

Employees.id Employees.name Departments.id Departments.department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Este resultado combina todos los registros de Employees y Departments. Incluye:

  • Registros con valores de id coincidentes en ambas tablas (Bob y Charlie).
  • Registros de Employees sin un registro correspondiente en Departments (Alice).
  • Registros de Departments sin un registro correspondiente en Employees (Marketing).

Aunque es muy útil, esta sintaxis no está soportada directamente en MySQL. Entonces, ¿cuál es la salida? Vamos a descubrirlo.

Cómo simular un Full Outer Join en MySQL

Como mencionamos arriba, MySQL no soporta explícitamente la palabra clave FULL OUTER JOIN. Sin embargo, aún podemos obtener el resultado deseado usando una combinación de LEFT JOIN y UNION

La idea para simular un full outer join en MySQL consiste en dos pasos:

  • Hacer un LEFT JOIN sobre la primera tabla para obtener todos sus registros, junto con los registros coincidentes de la segunda tabla.
  • Usar UNION para combinar esos resultados con los de un RIGHT JOIN y obtener todos los registros de la segunda tabla junto con los registros coincidentes de la primera.

Así funciona cada componente:

Left Join:
Visualización de Left Join

Right Join:
Visualización de Right Join

Ejemplo de Full Outer Join en MySQL

Aquí tienes un ejemplo de la solución alternativa usando los mismos datos de antes

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Employees
LEFT JOIN 
    Departments ON Employees.id = Departments.id

UNION

SELECT 
    Employees.id AS Employees_id, 
    Employees.name, 
    Departments.id AS Departments_id, 
    Departments.department
FROM 
    Departments
RIGHT JOIN 
    Employees ON Departments.id = Employees.id;

Esta consulta tiene dos partes:

  1. Un LEFT JOIN para obtener todos los registros de la tabla Employees y los registros coincidentes de la tabla Departments.
  2. Un RIGHT JOIN para obtener todos los registros de la tabla Departments y los registros coincidentes de la tabla Employees.

UNION combina los resultados de estas dos consultas y elimina las filas duplicadas.

Con las mismas tablas de ejemplo, el conjunto de resultados será:

Employees_id name Departments_id department
1 Alice NULL NULL
2 Bob 2 HR
3 Charlie 3 IT
NULL NULL 4 Marketing

Este resultado, igual que el FULL OUTER JOIN en SQL, combina todos los registros de Employees y Departments.

UNION filtra los duplicados automáticamente

En el caso concreto de nuestro ejemplo con las tablas Employees y Departments, el UNION que se usa en la solución alternativa de MySQL para un FULL OUTER JOIN no generará duplicados. Esto se debe a que el operador UNION elimina automáticamente las filas duplicadas de su conjunto de resultados.

Para que quede claro, veamos cómo funciona UNION en este contexto:

  • La primera parte de la consulta (el LEFT JOIN) obtiene todos los registros de la tabla Employees y los registros coincidentes de la tabla Departments. Esto incluye filas con valores de id coincidentes en ambas tablas y filas de Employees sin coincidencia en Departments.

  • La segunda parte de la consulta (el RIGHT JOIN) obtiene todos los registros de la tabla Departments y los registros coincidentes de la tabla Employees. Esto incluye filas con valores de id coincidentes en ambas tablas y filas de Departments sin coincidencia en Employees.

Como UNION elimina los duplicados, las filas con valores de id coincidentes (las que aparecerían tanto en los resultados del LEFT JOIN como del RIGHT JOIN) solo aparecerán una vez en el resultado final.

En resumen, usar UNION en este contexto garantiza que cada combinación única de datos de Employees y Departments aparezca solo una vez en el conjunto de resultados, imitando así el comportamiento de un FULL OUTER JOIN sin duplicados.

Practica en Beekeeper Studio

Espero que este tutorial de full outer join en MySQL te haya sido útil. En próximas publicaciones seguiremos explorando otras funciones avanzadas de MySQL, compartiendo más ejemplos de código y profundizando en por qué y cómo funcionan. Mientras tanto, sigue practicando tus habilidades de SQL, idealmente usando Beekeeper Studio.

Beekeeper Studio es un cliente de bases de datos gratuito y de código abierto

La mejor herramienta de consultas y edición de SQL que he usado. Tiene todo lo que necesito para administrar mi base de datos. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio es rápido, intuitivo y fácil de usar. Es compatible con muchísimas bases de datos y funciona de maravilla en Windows, Mac y Linux.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

Lo que dicen los usuarios de Beekeeper Studio

★★★★★
"Beekeeper Studio reemplazó por completo mi antiguo flujo de trabajo con SQL. Es rápido, intuitivo y hace que trabajar con bases de datos vuelva a ser agradable."
— Alex K., desarrollador de bases de datos
★★★★★
"He probado muchas GUI de bases de datos, pero Beekeeper logra el equilibrio perfecto entre funciones y simplicidad. Simplemente funciona."
— Sarah M., ingeniera Full Stack

¿Listo para mejorar tu flujo de trabajo con SQL?

download Descarga gratis