¡Suscríbete a mi canal de Youtube!

Donaciones

▷ FULL JOIN con UNION 【 FULL OUTER JOIN 】 en MySQL

 

Comprendiendo el FULL OUTER JOIN en MySQL y SQL

Cuando trabajamos con bases de datos relacionales, la necesidad de combinar datos de múltiples tablas es muy común. En SQL, una de las opciones más poderosas para esto es el FULL OUTER JOIN. Sin embargo, en MySQL, este tipo de unión no está soportado de manera nativa. En este artículo, exploraremos qué es un FULL OUTER JOIN, cómo funciona en bases de datos SQL que lo admiten y cómo podemos simularlo en MySQL.


¿Qué es un FULL OUTER JOIN?

Un FULL OUTER JOIN es un tipo de unión en SQL que devuelve todas las filas de ambas tablas combinadas, mostrando coincidencias cuando existen y completando con NULL cuando no hay correspondencia.

Ejemplo de FULL OUTER JOIN en SQL (PostgreSQL, SQL Server, Oracle)

SELECT *
FROM estudiantes
FULL OUTER JOIN inscripciones
ON estudiantes.id_estudiante = inscripciones.id_estudiante;

Este código devuelve:

  • Los estudiantes con sus inscripciones correspondientes.

  • Los estudiantes que no tienen inscripciones (NULL en los campos de inscripciones).

  • Inscripciones que no tienen un estudiante asociado (NULL en los campos de estudiantes).


¿Por qué MySQL no soporta FULL OUTER JOIN?

A diferencia de PostgreSQL, SQL Server u Oracle, MySQL no tiene un soporte nativo para FULL OUTER JOIN. Sin embargo, podemos lograr el mismo resultado combinando LEFT JOIN y RIGHT JOIN con UNION.


Cómo simular un FULL OUTER JOIN en MySQL

Podemos combinar los resultados de LEFT JOIN y RIGHT JOIN para lograr un efecto equivalente a FULL OUTER JOIN en MySQL.

Ejemplo práctico con MySQL

Definimos nuestras tablas
CREATE TABLE estudiantes (
    id_estudiante INT PRIMARY KEY,
    nombre VARCHAR(100),
    correo VARCHAR(100) UNIQUE
);

CREATE TABLE inscripciones (
    id_inscripcion INT PRIMARY KEY,
    id_estudiante INT,
    curso VARCHAR(100),
    FOREIGN KEY (id_estudiante) REFERENCES estudiantes(id_estudiante)
);
Insertamos datos
INSERT INTO estudiantes (id_estudiante, nombre, correo) VALUES
(1, 'Ana Gómez', 'ana@gmail.com'),
(2, 'Juan Pérez', 'juan@gmail.com'),
(3, 'Carlos López', 'carlos@gmail.com'),
(4, 'Pedro Méndez', 'pedro@gmail.com');

INSERT INTO inscripciones (id_inscripcion, id_estudiante, curso) VALUES
(1, 1, 'Matemáticas'),
(2, 2, 'Física'),
(3, 2, 'Química'),
(4, 3, 'Historia'),
(5, NULL, 'Biología');
Consulta para simular FULL OUTER JOIN en MySQL
SELECT e.id_estudiante, e.nombre, e.correo, i.id_inscripcion, i.curso
FROM estudiantes e
LEFT JOIN inscripciones i ON e.id_estudiante = i.id_estudiante
UNION
SELECT e.id_estudiante, e.nombre, e.correo, i.id_inscripcion, i.curso
FROM estudiantes e
RIGHT JOIN inscripciones i ON e.id_estudiante = i.id_estudiante;
Resultado esperado
id_estudiante nombre correo id_inscripcion curso
1 Ana Gómez ana@gmail.com 1 Matemáticas
2 Juan Pérez juan@gmail.com 2 Física
2 Juan Pérez juan@gmail.com 3 Química
3 Carlos López carlos@gmail.com 4 Historia
4 Pedro Méndez pedro@gmail.com NULL NULL
NULL NULL NULL 5 Biología

Conclusión

Aunque MySQL no soporta FULL OUTER JOIN de forma nativa, podemos simularlo usando LEFT JOIN y RIGHT JOIN con UNION. Esto nos permite obtener todas las filas de ambas tablas, asegurándonos de incluir datos sin coincidencias en cualquiera de ellas.

Si trabajas con bases de datos como PostgreSQL, SQL Server u Oracle, puedes usar FULL OUTER JOIN directamente. Sin embargo, si estás en MySQL, este método es la mejor alternativa para lograr el mismo resultado.

¿Te ha resultado útil esta explicación? ¡Déjame tus comentarios y comparte tu experiencia trabajando con joins en MySQL!

A continuación te dejo con un video donde explico más a detalle acerca de la cláusula FULL JOIN y UNION en MySQL.

No te olvides darle LIKE y SUSCRIBIRTE al blog y a mi canal si te gustó el video. Si gustas realizar una DONACIÓN para ayudarme a mejorar el canal y mi contenido, puedes hacerlo mediante el botón ❤$GRACIAS ubicado en la parte posterior del video en YouTube o visitando el enlace https://linktr.ee/ezavalar y haciendo clic en el botón Donaciones.

Comentarios

Entradas populares

Seguidores del blog

Suscríbete al blog

Recibe mis nuevas publicaciones por email: