How to Full Join in MySQL
This tutorial aims to explore how to perform a full join or a full outer join in MySQL.
A full outer join is used to merge or combine the entire data from two separate tables. For example, consider that we have two tables named student_id and student_name with a common column.
We can merge these two tables entirely in MySQL by matching the values of the common column along with a UNION, LEFT JOIN, and RIGHT JOIN. While this process seems complicated at first glance, let us understand these in steps.
Before we begin, we will create a dummy dataset by creating a student_details table with a few rows.
-- 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");
To view the entries in the data, we use the following code.
SELECT * FROM student_details;
Output:
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
We need another table named student_marks containing the marks of each student corresponding to the stu_id. We can make such a table using the following query.
-- 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);
We can visualize this table with the help of the following query.
SELECT * from student_marks;
Output:
stu_id stu_marks
1 10
2 20
3 30
4 7
5 9
6 35
7 15
Let us aim at making a full outer join on the student_details and student_marks table with stu_id as the common column in both the tables.
FULL JOIN Statement in MySQL
The basic syntax of the FULL OUTER JOIN technique is as follows.
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
As seen in the query above, we aim to join the two tables named table_1 and table_2 based on the common id column with the help of a left join and a right join.
We can use the following query to solve our problem with the student_details and the student_marks tables.
-- 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
As seen in the code above, we are merging both the tables under consideration based on the stu_id column. The output of the code above is as follows.
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
As seen in the output block, stu_marks are correctly assigned to each student based on the stu_id after the full outer join.
stu_id by specifying the exact column names to be joined with the help of left join and right join. This would create an outer join with no duplicate rows because of our query’s UNION clause.Therefore, with the help of the UNION statement along with a left join and a right join on two different tables, we can efficiently create a full outer join in MySQL without any duplicate rows.
