SQL - FULL JOIN Query
The FULL JOIN returns all the records all the specified tables. It includes NULL for any non-matching records.
In some databases, FULL JOIN is called FULL OUTER JOIN. It can return a very large result set because it returns all the rows from all the tables.
Syntax:
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
For the demo purpose, we will use the following Employee
and Department
tables in all examples.
EmpId | FirstName | LastName | Salary | DeptId | |
---|---|---|---|---|---|
1 | 'John' | 'King' | '[email protected]' | 33000 | 1 |
2 | 'James' | 'Bond' | |||
3 | 'Neena' | 'Kochhar' | '[email protected]' | 17000 | 2 |
4 | 'Lex' | 'De Haan' | '[email protected]' | 15000 | 1 |
5 | 'Amit' | 'Patel' | 18000 | 4 | |
6 | 'Abdul' | 'Kalam' | '[email protected]' | 25000 | 2 |
DeptId | Name |
---|---|
1 | 'Finance' |
2 | 'HR' |
3 | 'Sales' |
Now, look at the following FULL JOIN query.
SELECT emp.EmpId, emp.FirstName, dept.DeptId, dept.Name FROM Employee emp FULL JOIN Department dept ON emp.DeptId = dept.DeptId;
The above query will display the following result.
DeptId | Name | EmpId | FirstName |
---|---|---|---|
1 | 'John' | 1 | 'Finance' |
2 | 'James' | NULL | NULL |
3 | 'Neena' | 2 | 'HR' |
4 | 'Lex' | 1 | 'Finance' |
5 | 'Amit' | NULL | NULL |
6 | 'Abdul' | 2 | 'HR' |
NULL | NULL | 3 | 'Sales' |
As you can see, it fetches all the records from both tables. First, it fetches all the records from the left table Employee
and then all the records from the right table Department
. It includes NULL for all non-matching records from both tables.
Now, let's swap the tables and see how the result will be changed.
SELECT emp.EmpId, emp.FirstName, dept.DeptId, dept.Name FROM Department dept FULL JOIN Employee emp ON emp.DeptId = dept.DeptId;
The above query will display the following result.
EmpId | FirstName | DeptId | Name |
---|---|---|---|
1 | 'John' | 1 | 'Finance' |
4 | 'Lex' | 1 | 'Finance' |
3 | 'Neena' | 2 | 'HR' |
6 | 'Abdul' | 2 | 'HR' |
NULL | NULL | 3 | 'Sales' |
2 | 'James' | NULL | NULL |
5 | 'Amit' | NULL | NULL |
As you can see, first it displays all the records from the right table Department
and then records from the left table Employee
. It returns NULL for all non-matching records in both tables.