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.
