OUTER JOIN in Oracle

OUTER JOIN
Oracle supports three major types of Outer joins namely, Left Outer Join, Right Outer Join and Full Outer Join.

Left Outer Join:
As the name suggests, the Left Outer Join query offers more benefits for the Left table, can also be understood as the First table and thus returns all the rows from the Left table for the specified fields and only those rows from the Right table, can also be understood as the Second table where the join condition is met.

Syntax:

SELECT expr_1, expr_2, ... expr_n  
FROM table_1   
LEFT JOIN table_2  
ON join_predicate;

Parameters:
expr_1, expr_2, … expr_n: It is used to specify the columns of the table which needs to be joined.
table_1, table_2: It is used to specify the name of the tables from which the records need to be joined.
join_predicate: It is used to specify the joining conditions to be strictly followed by the rows to be included in the result set.

Example: Joining two tables with the Left Outer Join Query.
Students Table:

STUDENT_ID STUDENT_NAME STUDENT_AGE
1 Joy 20
2 Smiley 19
3 Happy 21
4 James 22
5 Bond 25

Teachers Table:

TEACHER_ID TEACHER_NAME TEACHER_AGE
101 James 30
102 Bond 25
103 Smith 40

Query:

SELECT students.student_id, students.student_name, teachers.teacher_id  
FROM students  
LEFT JOIN teachers  
ON students.student_name = teachers.teacher_name  

Output:

STUDENT_ID STUDENT_NAME TEACHER_ID
1 James 101
2 Bond 102
3 Smith
4 Smiley
5 Happy

Explanation:
The ‘students’ and the ‘teachers’ are the already existing tables. After the joining, all the selected fields of the rows of the ‘students’ table and the selected fields of the rows of the ‘teachers’ table which are satisfying the conditions will be displayed as the result. For the rows in the ‘students’ table that does not have any matching row in the ‘teachers’ table, the result will display a NULL value in the columns of the ‘teachers’ table.

Right Outer Join:
As the name suggests, the Right Outer Join query offers more benefits for the Right table, can also be understood as the Second table, and thus returns all the rows from the Right table for the specified fields and only those rows from the Left table, can also be understood as the First table, where the join condition is met.

Syntax:

SELECT expr_1, expr_2, ... expr_n  
FROM table_1   
RIGHT JOIN table_2  
ON join_predicate;

Parameters:
expr_1, expr_2, … expr_n: It is used to specify the columns of the table which needs to be joined.
table_1, table_2: It is used to specify the name of the tables from which the records need to be joined.
join_predicate: It is used to specify the joining conditions to be strictly followed by the rows to be included in the result set.
Example: Joining two tables with the Right Outer Join Query.
Students Table:

STUDENT_ID STUDENT_NAME STUDENT_AGE
1 Joy 20
2 Smiley 19
3 Happy 21
4 James 22
5 Bond 25

Teachers Table:

TEACHER_ID TEACHER_NAME TEACHER_AGE
101 James 30
102 Bond 25
103 Smith 40

Query:

SELECT students.student_id, students.student_name, teachers.teacher_id  
FROM students  
RIGHT JOIN teachers  
ON students.student_name = teachers.teacher_name  

Output:

STUDENT_ID STUDENT_NAME TEACHER_ID
4 James 101
5 Bond 102
103

Explanation:
The ‘students’ and the ‘teachers’ are the already existing tables. After the joining, all the selected fields of the rows of the ‘teachers’ table and the selected fields of the rows of the ‘students’ table which are satisfying the conditions will be displayed as the result. For the rows in the ‘teachers’ table that does not have any matching row in the ‘students’ table, the result will display a NULL value in the columns of the ‘students’ table.

Full Outer Join:
As the name suggests, the Full Outer Join query does not gives more priority to any of the table, and thus returns all the rows of the selected fields from both the tables, no matter whether the join condition is met or not.

Syntax:

SELECT expr_1, expr_2, ... expr_n  
FROM table_1   
FULL OUTER JOIN table_2  
ON join_predicate;

Parameters:
expr_1, expr_2, … expr_n: It is used to specify the columns of the table which needs to be joined.
table_1, table_2: It is used to specify the name of the tables from which the records need to be joined.
join_predicate: It is used to specify the joining conditions to be strictly followed by the rows to be included in the result set.

Example: Joining two tables with the Full Outer Join Query.
Students Table:

STUDENT_ID STUDENT_NAME STUDENT_AGE
1 Joy 20
2 Smiley 19
3 Happy 21
4 James 22
5 Bond 25

Teachers Table:

TEACHER_ID TEACHER_NAME TEACHER_AGE
101 James 30
102 Bond 25
103 Smith 40

Query:

SELECT students.student_id, students.student_name, teachers.teacher_id  
FROM students  
FULL OUTER JOIN teachers  
ON students.student_name = teachers.teacher_name  

Output:

STUDENT_ID STUDENT_NAME TEACHER_ID
4 James 101
5 Bond 102
1 Smith
2 Smiley
3 Happy
103

Explanation:
The ‘students’ and the ‘teachers’ are the already existing tables. After the joining, all the selected fields of the rows of the ‘teachers’ table and the selected fields of the rows of the ‘students’ table will be displayed as the result. For the rows in the ‘teachers’ table that does not have any matching row in the ‘students’ table, the result will display a NULL value in the columns of the ‘students’ table. Similarly, for the rows in the ‘students’ table that does not have any matching row in the ‘teachers’ table, the result will display a NULL value in the columns of the ‘teachers’ table.