SQLDAY 16
SQLDAY 16
OUTER JOIN
"It is used to Obtain Un-Matched Records "
Example :
EMP DEPT
ENAME DEPTNO DNAME DEPTNO
A 20 D1 10
B Null D2 20
C 10 D3 30
D Null D4 40
Left Right
Result Table :
SYNTAX:
SELECT Column_Name
FROM Table_Name1 LEFT [OUTER] JOIN Table_Name2
ON < JOIN_CONDITION> ;
SELECT *
FROM EMP LEFT JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO ;
Oracle
SELECT Column_Name
SELECT Column_Name
FROM Table_Name1 , Table_Name2
WHERE Table1.Col_Name = Table2.Col_Name (+) ;
SELECT *
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO (+) ;
ENAME DNAME
A D2
C D1
B Null
D Null
Example :
EMP DEPT
ENAME DEPTNO DNAME DEPTNO
A 20 D1 10
B Null D2 20
C 10 D3 30
D Null D4 40
Left Right
Result Table :
SYNTAX:
ANSI [ American National Standard Institute ] SELECT Column_Name
FROM Table_Name1 RIGHT[OUTER] JOIN Table_Name2
ON < JOIN_CONDITION> ;
SELECT *
FROM EMP RIGHT JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO ;
Oracle
SELECT Column_Name
FROM Table_Name1 , Table_Name2
WHERE Table1.Col_Name (+) = Table2.Col_Name ;
SELECT *
FROM EMP , DEPT
WHERE EMP.DEPTNO(+) = DEPT.DEPTNO ;
ENAME DNAME
A D2
C D1
Null D3
Null D4
Example :
EMP DEPT
Left Right
Result Table :
SYNTAX:
SELECT Column_Name
FROM Table_Name1 FULL [OUTER] JOIN Table_Name2
ON < JOIN_CONDITION> ;
SELECT *
FROM EMP FULL JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO ;
ENAME DNAME
A D2
C D1
B Null
D Null
SELF JOIN :
"Joining a table by itself is known as Self Join "
Why ? / When ?
EMP E1 EMP E2
EID ENAME E1.MGR E2.EID ENAME MGR
1 ALLEN 3 1 ALLEN 3
2 SMITH 1 2 SMITH 1
3 MILLER 2 3 MILLER 2
Result table :
SELECT *
FROM EMP E1 JOIN EMP E2
ON E1.MGR = E2.EID ;
Oracle
SELECT Column_Name
FROM Table_Name1T1 , Table_Name2 T2
SELECT *
FROM EMP E1 , EMP E2 WHERE E1.MGR = E2.EID ;
EMP DEPT
EMP.DEPTNO = DEPT.DEPTNO
E1 E2
E1.MGR = E2.EMPNO
E1 E2 E3
E1.MGR = E2.EMPNO
E2.MGR = E3.EMPNO
E1.MGR = E2.EMPNO
E1 D1 E2 D2
5. NATURAL JOIN :
Syntax:
ANSI :
SELECT Col_Name
FROM Table_Name1 NATURAL JOIN Table_Name2;
Emp DEPT
ENAME DEPTNO DNAME DEPTNO
A 20 D1 10
B 30 D2 20
C 10 D3 30
Emp
CUSTOMER
ENAME DEPTNO CNAME CID
A 20 X 101
B 30 Y 102
C 10 Z 103
QUESTIONS:
1. WAQTD NAME OF THE EMPLOYEE AND HIS
MANAGER'S NAME IF EMPLOYEE IS WORKING AS CLERK
SELECT E1.ENAME , E2.ENAME
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.JOB = 'CLERK';
WORKING PRINCIPLE :
NOTE :
i. In co-related sub query a Join condition is a must , And must
be written only in the Inner Query .
ii. Co-Related sub query works with the principles of both
SUB QUERY & JOINS .
Example :
DEPT EMP
ENAME DNO
DNAME DNO
A 20
D1 10
D2 20 B 10
D3 30 C 20
D4 40 D 30
D3
D2
D1
null ( 20 , 20 )
SELECT DNAME 10
FROM DEPT D 30
null
WHERE D.DNO IN ( SELECT E.DNO
FROM EMP E
WHERE D.DNO= E.DNO ) ;
10
20 10 IN 10 True
30 10 = 20 False
40 20 IN ( 20 , 20 ) 10 = 10 True
20 = 20 TRUE
10 = 20 False
20 = 20 TRUE
10 = 30 False
30 IN 30 True
40 IN Null Null
20 = 20 True
20 = 10 False
20 = 20 True
20 = 30 False
30 = 20 False
30 = 10 False
30 = 20 False
30 = 30 True
40 = 20 False
40 = 10 False
40 = 20 False
40 = 30 False
SELECT DNAME
FROM DEPT D
WHERE D.DEPTNO IN ( SELECT E.DEPTNO
FROM EMP E
WHERE D.DEPTNO = E.DEPTNO ) ;
SELECT DNAME
FROM DEPT D
WHERE D.DEPTNO NOT IN ( SELECT E.DEPTNO
FROM EMP E
WHERE D.DEPTNO = E.DEPTNO ) ;
D3
D2
D1
( 20 , 20 )
SELECT DNAME 10
FROM DEPT D 30
null
WHERE EXISTS ( SELECT E.DNO
FROM EMP E
WHERE D.DNO= E.DNO. ) ;
10 = 20 False
10 = 10 True
10 = 20 False
10 = 30 False
20 = 20 True
20 = 10 False
20 = 20 True
20 = 30 False
30 = 20 False
30 = 10 False
40 = 20 False
40 = 10 False
40 = 20 False
40 = 30 False
3 MAX SAL :
To Find MAX & MIN salary :
E1.SAL
1000
3000 3000
SELECT SAL FROM EMP E1
2000 2
WHERE ( SELECT COUNT( DISTINCT SAL )
3000 FROM EMP E2
2000 WHERE E1.SAL < E2.SAL ) = 2 ;
4000
E1.SAL E2.SAL
5000
1000 1000
3000 3000
2000 2000
3000 3000
2000 2000
4000 4000
5000 5000
SELECT SAL
FROM EMP E1
WHERE ( SELECT COUNT( DISTINCT SAL )
FROM EMP E2
WHERE E1.SAL < E2.SAL ) in ( 1 , 3, 4 , 6 ) ;
SELECT SAL
FROM EMP
E1
WHERE ( SELECT COUNT( DISTINCT SAL )
FROM EMP E2
WHERE E1.SAL > E2.SAL ) = N-1 ;