Unión completa en MySQL
Este tutorial tiene como objetivo explorar cómo realizar una unión completa o una unión externa completa en MySQL.
Una combinación externa completa se usa para fusionar o combinar todos los datos de dos tablas separadas. Por ejemplo, considere que tenemos dos tablas llamadas student_id
y student_name
con una columna común.
Podemos fusionar estas dos tablas por completo en MySQL haciendo coincidir los valores de la columna común junto con una UNION
, LEFT JOIN
y RIGHT JOIN
. Si bien este proceso parece complicado a primera vista, entendámoslo en pasos.
Antes de empezar, crearemos un conjunto de datos ficticio creando una tabla student_details
con unas pocas filas.
-- create the table student_details
CREATE TABLE student_details(
stu_id int,
stu_firstName varchar(255) DEFAULT NULL,
stu_lastName varchar(255) DEFAULT NULL,
primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName)
VALUES(1,"Preet","Sanghavi"),
(2,"Rich","John"),
(3,"Veron","Brow"),
(4,"Geo","Jos"),
(5,"Hash","Shah"),
(6,"Sachin","Parker"),
(7,"David","Miller");
Para ver las entradas en los datos, usamos el siguiente código.
SELECT * FROM student_details;
Producción :
stu_id stu_firstName stu_lastName
1 Preet Sanghavi
2 Rich John
3 Veron Brow
4 Geo Jos
5 Hash Shah
6 Sachin Parker
7 David Miller
Necesitamos otra tabla llamada student_marks
que contenga las notas de cada alumno correspondientes al stu_id
. Podemos hacer una tabla de este tipo usando la siguiente consulta.
-- create the table student_marks
CREATE TABLE student_marks(
stu_id int,
stu_marks int
);
-- insert rows to the table student_marks
INSERT INTO student_marks(stu_id,stu_marks)
VALUES(1,10),
(2,20),
(3,30),
(4,7),
(5,9),
(6,35),
(7,15);
Podemos visualizar esta tabla con la ayuda de la siguiente consulta.
SELECT * from student_marks;
Producción :
stu_id stu_marks
1 10
2 20
3 30
4 7
5 9
6 35
7 15
Apuntemos a hacer una unión externa completa en las tablas student_details
y student_marks
con stu_id
como la columna común en ambas tablas.
Declaración FULL JOIN
en MySQL
La sintaxis básica de la técnica FULL OUTER JOIN
es la siguiente.
SELECT * FROM table_1
LEFT JOIN table_2 ON table_1.id = table_2.id
UNION
SELECT * FROM table_1
RIGHT JOIN table_2 ON table_1.id = table_2.id
Como se ve en la consulta anterior, nuestro objetivo es unir las dos tablas denominadas table_1
y table_2
en función de la columna id
común con la ayuda de un left join
y un right join
.
Podemos usar la siguiente consulta para resolver nuestro problema con las tablas student_details
y student_marks
.
-- Full Join using UNION
SELECT * FROM student_details
LEFT JOIN student_marks ON student_details.stu_id = student_marks.stu_id
UNION
SELECT * FROM student_details
RIGHT JOIN student_marks ON student_details.stu_id = student_marks.stu_id
Como se ve en el código anterior, estamos fusionando ambas tablas en consideración en función de la columna stu_id
. La salida del código anterior es la siguiente.
stu_id stu_firstName stu_lastName stu_id stu_marks
1 Preet Sanghavi 1 10
2 Rich John 2 20
3 Veron Brow 3 30
4 Geo Jos 4 7
5 Hash Shah 5 9
6 Sachin Parker 6 35
7 David Miller 7 15
Como se ve en el bloque de salida, los stu_marks
se asignan correctamente a cada estudiante en función del stu_id
después de la unión externa completa.
Nota: Podemos evitar tener la columna duplicada stu_id
especificando los nombres exactos de las columnas a unir con la ayuda de left join
y right join
. Esto crearía una unión externa sin filas duplicadas debido a la cláusula UNION
de nuestra consulta.
Por lo tanto, con la ayuda de la sentencia UNION
junto con un left join
y un right join
en dos tablas diferentes, podemos crear eficientemente una unión externa completa en MySQL sin ninguna fila duplicada.