Left and Right Outer Joins
Outer joins can be split into two types:
- Left outer joins
- Right outer joins
Example:
SELECT ...
FROM table1, table2
...
If table1 contains a row with a null value in column1. To perform a left outer join, the WHERE clause is
WHERE table1.column1 = table2.column2 (+);
In a left outer join, the outer join operator is actually on the right of the equality operator.
If assume table2 contains a row with a null value in column2. To perform a right outer join:
WHERE table1.column1 (+) = table2.column2;
CREATE TABLE departments
(department_id number(10) not null,
department_name varchar2(50) not null,
CONSTRAINT departments_pk PRIMARY KEY (department_id)
);
insert into departments ( department_id, department_name )values(2,'Purchasing' );
insert into departments ( department_id, department_name )values(3,'Call Center' );
insert into departments ( department_id, department_name )values(4,'Communication' );
CREATE TABLE employees
( employee_id number(10) not null,
last_name varchar2(50) not null,
job_id varchar2(30),
department_id number(10),
salary number(6),
manager_id number(6),
CONSTRAINT employees_pk PRIMARY KEY (employee_id),
CONSTRAINT fk_departments FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);
insert into employees( employee_id, last_name, job_id, salary,department_id ,manager_id)
values( 1001, 'Lawson', 'MGR', 30000, 1, 1004);
insert into employees( employee_id, last_name, job_id, salary, department_id ,manager_id)
values( 1002, 'Wells', 'DBA', 20000, 2, 1005 );
insert into employees( employee_id, last_name, job_id, salary, department_id ,manager_id)
values( 1003, 'Bliss', 'PROG', 24000, 3, 1004);
insert into employees( employee_id, last_name, job_id, salary, department_id, manager_id)
values( 1004, 'Kyte', 'MGR', 25000 ,4, 1005);
insert into employees( employee_id, last_name, job_id, salary, department_id, manager_id)
values( 1005, 'Viper', 'PROG', 20000, 1, 1006);
insert into employees( employee_id, last_name, job_id, salary, department_id,manager_id)
values( 1006, 'Beck', 'PROG', 20000, 2, null);
insert into employees( employee_id, last_name, job_id, salary, department_id, manager_id)
values( 1007, 'Java', 'PROG', 20000, 3, 1006);
insert into employees( employee_id, last_name, job_id, salary, department_id, manager_id)
values( 1008, 'Oracle', 'DBA', 20000, 5, 1006);
SQL> select e.employee_id, e.last_name, d.department_name
2 from employees e, departments d
3 where e.department_id = d.department_id(+)
4 and e.job_id = 'MGR';
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- --------------------------------------------------
1004 Kyte Communication
SQL>
SQL> select e.employee_id, e.last_name, d.department_name
2 from employees e, departments d
3 where e.department_id(+) = d.department_id
4 and e.job_id = 'MGR';
EMPLOYEE_ID LAST_NAME DEPARTMENT_NAME
----------- --------------------------------------------------
1004 Kyte Communication
Home »
Oracle »
Select »
Oracle »
Select »
Join:
- Table Join
- Using Table name to reference duplicate names
- Table Alias
- Cartesian Products
- Join more than two tables
- Join Conditions and Join Types
- Outer Joins
- Left and Right Outer Joins
- Outer join Error
- Self Join
- Outer Self Join
- Inner Joins Using SQL/92
- Joins with USING Keyword
- Inner Joins with More than Two Tables Using SQL/92
- Inner Joins on Multiple Columns Using SQL/92
- Outer Joins in SQL/92 Syntax
- Self Joins Using SQL/92
- Cross Joins Using SQL/92
Related: