×
☰ See All Chapters

Oracle equi join

When we use “=” (equal) operator as join condition, then it is called as equi join. There are three types of equi joins:

  1. Self Join 

  2. Inner Join 

  3. Outer Join 

For all the examples throughout this chapter we use the below tables:

oracle-equi-join-0
 

CREATE TABLE DEPT

       (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,

        DNAME VARCHAR2(14) ,

        LOC VARCHAR2(13) ) ;

 

CREATE TABLE EMP

       (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,

        ENAME VARCHAR2(10),

        JOB VARCHAR2(9),

        MGR NUMBER(4),

        HIREDATE DATE,

        SAL NUMBER(7,2),

        COMM NUMBER(7,2),

        DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');

INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');

INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');

INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);

INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);

INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);

INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);

INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);

INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);

INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);

INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);

INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);

INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);

INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);

INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);

INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);

INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);

COMMIT;

Self Join

  • The self join joins a table to itself, as if the table were two tables, temporarily renaming at least one table in the SQL statement using a table alias. 

  • Self joins are useful when all the data you want to retrieve resides in one table, but you must somehow compare records in the table to other records in the table. For example suppose you have a table that stores an employee identification number, the employee’s name, and the employee identification number of the employee’s manager. You might want to produce a list of all employees and their managers’ names. 

SELECT E.ENAME, E1.ENAME AS MANAGER

FROM EMP E JOIN EMP E1

ON E.MGR = E1.EMPNO;

oracle-equi-join-1
 

Inner join

In the inner join only the matching records will be selected and joined in the result.

SELECT D.DNAME, E.ENAME                  

FROM EMP E INNER JOIN DEPT D

ON D.DEPTNO = E.DEPTNO;

oracle-equi-join-2
 

Outer join

 In an outer join matching records will be selected plus extra records will be selected. Outer join is the result of inner join plus extra records.

Outer join = inner join + extra records.

Extra records are the rows which cannot match the condition due to null values.

There are three types of outer joins:

Left outer join

Left outer join will select all matching records plus extra records in the left table.

Left outer join = inner join + extra records in the left table.

oracle-equi-join-3
 

SELECT D.DNAME, E.ENAME                  

FROM EMP E LEFT OUTER JOIN DEPT D

ON D.DEPTNO = E.DEPTNO;

oracle-equi-join-4
 

SELECT D.DNAME, E.ENAME

FROM DEPT D LEFT OUTER JOIN EMP E

ON D.DEPTNO = E.DEPTNO;

oracle-equi-join-5
 

Right outer join

Right outer join will select all matching records plus extra records in the right table.

Right outer join = inner join + extra records in right table.

oracle-equi-join-6
 

SELECT D.DNAME, E.ENAME                  

FROM EMP E RIGHT OUTER JOIN DEPT D

ON D.DEPTNO = E.DEPTNO;

oracle-equi-join-7
 

SELECT D.DNAME, E.ENAME

FROM DEPT D RIGHT OUTER JOIN EMP E

ON D.DEPTNO = E.DEPTNO;

oracle-equi-join-8
 

Full outer join

Full outer join will select all matching records plus extra records in both tables.

Full outer join = inner join + extra records in both tables. This is not supported in MySQL.

SELECT E.ENAME , D.DNAME, E.JOB

FROM DEPT D FULL OUTER JOIN EMP E

ON D.DEPTNO = E.DEPTNO;

 

oracle-equi-join-9
 

All Chapters
Author