☰ 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:
Self Join
Inner Join
Outer Join
For all the examples throughout this chapter we use the below tables:
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; |
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; |
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.
SELECT D.DNAME, E.ENAME FROM EMP E LEFT OUTER JOIN DEPT D ON D.DEPTNO = E.DEPTNO; |
SELECT D.DNAME, E.ENAME FROM DEPT D LEFT OUTER JOIN EMP E ON D.DEPTNO = E.DEPTNO; |
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.
SELECT D.DNAME, E.ENAME FROM EMP E RIGHT OUTER JOIN DEPT D ON D.DEPTNO = E.DEPTNO; |
SELECT D.DNAME, E.ENAME FROM DEPT D RIGHT OUTER JOIN EMP E ON D.DEPTNO = E.DEPTNO; |
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; |
All Chapters