0% found this document useful (0 votes)
2 views

SQLDAY 16

The document explains different types of SQL joins: Left Outer Join, Right Outer Join, Full Outer Join, Self Join, and Natural Join, detailing their purposes and providing examples. It includes syntax for ANSI and Oracle SQL for each join type, along with sample queries to retrieve employee and department information. Additionally, it presents assignments related to Self Join and Natural Join for practice.

Uploaded by

pradeepsoratur07
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

SQLDAY 16

The document explains different types of SQL joins: Left Outer Join, Right Outer Join, Full Outer Join, Self Join, and Natural Join, detailing their purposes and providing examples. It includes syntax for ANSI and Oracle SQL for each join type, along with sample queries to retrieve employee and department information. Additionally, it presents assignments related to Self Join and Natural Join for practice.

Uploaded by

pradeepsoratur07
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 19

DAY 16

Thursday, August 6, 2020 9:34 AM

OUTER JOIN
"It is used to Obtain Un-Matched Records "

1. Left Outer Join :

"It is used to obtain Un-Matched Records of Left Table


Along with Matching 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 :

ENAME EMP.DEPTNO DNAME DEPT.DEPTNO


A 20 D2 20
C 10 D1 10
B Null Null Null
D Null Null Null

SYNTAX:

ANSI [ American National Standard Institute ]

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

New Section 1 Page 1


2. 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 (+) ;

 WAQTD names and dnames of all the employees even


though the employees Don’t work in any dept .

SELECT ENAME , DNAME


FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO(+) ;

ENAME DNAME
A D2
C D1
B Null
D Null

2. Right Outer Join :

"It is used to obtain Un-Matched Records of Right


Table Along with Matching 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 :

ENAME EMP.DEPTNO DNAME DEPT.DEPTNO


A 20 D2 20
C 10 D1 10

New Section 1 Page 2


A 20 D2 20
C 10 D1 10
Null Null D3 30
Null Null D4 40

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 ;

 WAQTD names and dnames of all the employees even


though the there are no employees in a dept .

SELECT ENAME , DNAME


FROM EMP , DEPT
WHERE EMP.DEPTNO(+) = DEPT.DEPTNO ;

ENAME DNAME
A D2
C D1
Null D3
Null D4

3. Full Outer Join :

"It is used to obtain Un-Matched Records of both Left


& Right Table Along with Matching Records ".

Example :

EMP DEPT

New Section 1 Page 3


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 :

ENAME EMP.DEPTNO DNAME DEPT.DEPTNO


A 20 D2 20
C 10 D1 10
B Null Null Null
D Null Null Null
Null Null D3 30
Null Null D4 40

SYNTAX:

1. ANSI [ American National Standard Institute ]

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 ;

 WAQTD names and dnames of all the employees and depts


even though the employees Don’t work in any dept and a
dept having no employees .

SELECT ENAME , DNAME


FROM EMP FULL OUTER DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;

ENAME DNAME
A D2
C D1
B Null
D Null

New Section 1 Page 4


Null D3
Null D4

SELF JOIN :
"Joining a table by itself is known as Self Join "

Why ? / When ?

"Whenever the data to select is in the same table but present


In different records we use self-join ".

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

Join Condition : E1.MGR = E2.EID


Example :

Result table :

E1.eid E1.ename E1.mgr E2.eid E2.ename E2.mgr


1 ALLEN 3 3 MILLER 2
2 SMITH 1 1 ALLEN 3
3 MILLER 2 2 SMITH 1

Employees Details - E1 Managers Details - E2

New Section 1 Page 5


SYNTAX:
ANSI [ American National Standard Institute ] SELECT Column_Name
FROM Table_Name1 JOIN Table_Name2
ON < JOIN_CONDITION> ;

SELECT *
FROM EMP E1 JOIN EMP E2
ON E1.MGR = E2.EID ;

Oracle

SELECT Column_Name
FROM Table_Name1T1 , Table_Name2 T2

New Section 1 Page 6


SELECT Column_Name
FROM Table_Name1T1 , Table_Name2 T2 WHERE < Join_Condition > ;

SELECT *
FROM EMP E1 , EMP E2 WHERE E1.MGR = E2.EID ;

1. WAQTD Ename and Manager's name for all the employees .

SELECT E1.ENAME , E2.ENAME


FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO ;

2. WAQTD Ename , sal along with manager's name


and manager's salary for all the employees .

SELECT E1.ENAME , E1.SAL , E2.ENAME , E2.SAL


FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO ;

3. WAQTD ename , manager's name along with their


deptno If employee is working as clerk .

SELECT E1.ENAME , E2.ENAME , E1.DEPTNO ,


E2.DEPTNO
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO AND E1.JOB='CLERK' ;

4. WAQTD ename , manager's job if manager works as Analyst .

SELECT E1.ENAME , E2.JOB


FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.JOB ='ANALYST' ;

5. WAQTD ename and manager's name along with their job


if emp and manager are working for same designation .

SELECT E1.ENAME , E2.ENAME , E1.JOB , E2.JOB


FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.JOB = E2.JOB ;

6. WAQTD ename emp salary manager's name manager's


salary If manager earns more than employee .

SELECT E1.ENAME , E1.SAL , E2.ENAME , E2.SAL


FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.SAL > E1.SAL ;

New Section 1 Page 7


7. WAQTD ename and manager's name along with
manager's commission if manager earns commission .

SELECT E1.ENAME , E2.ENAME , E2.COMM


FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.COMM IS NOT NULL ;

NOTE : TO join 'N' number of tables we need to write 'N-


1' number of join conditions

ASSIGNMENT ON SELF JOIN :

1. WAQTD NAME OF THE EMPLOYEE AND HIS


MANAGER'S NAME IF EMPLOYEE IS WORKING AS CLERK

2. WAQTD NAME OF THE EMPLOYEE AND


MANAGER'S DESIGNATION IF MANAGER WORKS IN
DEPT 10 OR 20

3. WAQTD NAME OF THE EMP AND MANAGERS SALARY IF


EMPLOYEE AND MANAGER BOTH EARN MORE THAN
2300

4. WAQTD EMP NAME AND MANAGER'S HIREDATE


IF EMPLOYEE WAS HIRED BEFORE1982

5. WAQTD EMP NAME AND MANAGER'S COMM IF


EMPLOYEE WORKS AS SALESMAN AND
MANAGER WORKS IN DEPT 30

6. WAQTD EMP NAME AND MANAGER NAME AND


THEIR SALARIES IF EMPLOYEE EARNS MORE THAN
MANAGER

7. WAQTD EMP NAME AND HIREDATE , MANAGER


NAME AND HIREDATE IF
MANAGER WAS HIRED BEFORE EMPLOYEE

8. WAQTD EMP NAME AND MANAGER NAME IF BOTH


ARE WORKING IN SAME JOB

9. WAQTD EMP NAME AND MANAGER NAME IF


MANAGER IS WORKING AS ACTUAL MANAGER

10. WAQTD EMP NAME AND MANAGER NAME ALONG


WITH THEIR ANNUAL SALARIES IF EMPLOYEE WORKS
IN DEPT 10 , 20 AND MANAGER'S SAL IS GREATER THAN
EMPLOYEES SALARY .

11. WAQTD EMPLOYEE'S NAME AND


MANAGER'S DESIGNATION FOR ALL THE
EMPLOYEES

12. WAQTD EMPLOYEE'S NAME AND MANAGER'S


New Section 1 Page 8
SALARY FOR ALL THE EMPLOYEES IF MANAGER'S
SALARY ENDS WITH 50

New Section 1 Page 9


Examples :

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

E1.DEPTNO = D1.DEPTNO E2.DEPTNO = D2.DEPTNO

5. NATURAL JOIN :

"It behaves as INNER JOIN if there is a relation between the given


two tables , else it behaves as CROSS 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

Result Table : has a relation ( inner join )

New Section 1 Page 10


DEPTNO ENAME DNAME
20 A D2
30 B D3
10 C D1

Emp
CUSTOMER
ENAME DEPTNO CNAME CID
A 20 X 101
B 30 Y 102
C 10 Z 103

Result Table : has no relation ( cross join )

ENAME DEPTNO CNAME CID


A 20 X 101
A 20 Y 102
A 20 Z 103
B 30 X 101
B 30 Y 102
B 30 Z 103
C 10 X 101
C 10 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';

2. WAQTD NAME OF THE EMPLOYEE AND


MANAGER'S DESIGNATION IF MANAGER WORKS IN
DEPT 10 OR 20 SELECT E1.ENAME , E2.JOB
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.DEPTNO IN ( 10 , 20 );

3. WAQTD NAME OF THE EMP AND MANAGERS SALARY IF


EMPLOYEE AND MANAGER BOTH EARN MORE THAN
2300 SELECT E1.ENAME , E2.SAL
FROM EMP E1 , EMP E2
WHERE E1.MGR =
E2.EMPNO

New Section 1 Page 11


AND E1.SAL > 2300 AND E2.SAL>2300 ;

4. WAQTD EMP NAME AND MANAGER'S HIREDATE


IF EMPLOYEE WAS HIRED BEFORE1982
SELECT E1.ENAME , E2.HIREDATE
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.HIREDATE < '01-JAN-82' ;

5. WAQTD EMP NAME AND MANAGER'S COMM IF


EMPLOYEE WORKS AS SALESMAN AND
MANAGER WORKS IN DEPT 30
SELECT E1.ENAME , E2.COMM
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.JOB = 'SALESMAN' AND E2.DEPTNO = 30 ; ;

6. WAQTD EMP NAME AND MANAGER NAME AND


THEIR SALARIES IF EMPLOYEE EARNS MORE THAN
MANAGER SELECT E1.ENAME, E1.SAL , E2.ENAME ,
E2.SAL
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.SAL > E2.SAL ;

7. WAQTD EMP NAME AND HIREDATE , MANAGER


NAME AND HIREDATE IF
MANAGER WAS HIRED BEFORE EMPLOYEE
SELECT E1.ENAME ,E1.HIREDATE , E2.ENAME , E2.HIREDATE
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.HIREDATE < E1.HIREDATE ;

8. WAQTD EMP NAME AND MANAGER NAME IF BOTH


ARE WORKING IN SAME JOB
SELECT E1.ENAME , E2.ENAME
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.JOB = E2.JOB ;

9. WAQTD EMP NAME AND MANAGER NAME IF


MANAGER IS WORKING AS ACTUAL MANAGER
SELECT E1.ENAME , E2.ENAME
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.JOB = 'MANAGER';

10. WAQTD EMP NAME AND MANAGER NAME ALONG


WITH THEIR ANNUAL SALARIES IF EMPLOYEE WORKS
IN DEPT 10 , 20 AND MANAGER'S SAL IS GREATER THAN
EMPLOYEES SALARY .
SELECT E1.ENAME , E1.SAL*12 , E2.ENAME , E2.SAL*12
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E1.DEPTNO IN ( 10,20) AND E2.SAL > E1.SAL ;

New Section 1 Page 12


11. WAQTD EMPLOYEE'S NAME AND
MANAGER'S DESIGNATION FOR ALL THE
EMPLOYEES SELECT E1.ENAME , E2.JOB
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
;

12. WAQTD EMPLOYEE'S NAME AND MANAGER'S


SALARY FOR ALL THE EMPLOYEES IF MANAGER'S
SALARY ENDS WITH 50
SELECT E1.ENAME , E2.SAL
FROM EMP E1 , EMP E2
WHERE E1.MGR = E2.EMPNO
AND E2.SAL LIKE '%50' ;

New Section 1 Page 13


DAY 17
Friday, August 7, 2020 9:50 AM

CO - RELATED SUB QUERY


" A query written inside another query such that the outer query and the inner
query are Dependent on each other , this is known as Co-Related Sub-Query
".

WORKING PRINCIPLE :

Let us consider two queries inner and outer query respectively ,


1. Outer query executes first but partially
2. The partially executed output is given as an input to the inner Query
3. The inner query executes completely and generates an output
4. The output of inner query is fed as an input to the Outer query
and Outer
Query produces the result .
5. Therefore, we can state that the outer query and the inner query both
are INTERDEPENDENT ( dependent on each other ) .

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 .

DIFFERENCE BETWEEN SUB QUERY AND CO RELATED SUB


QUERY .
SUB QUERY CO-RELATED SUB QUERY
Inner query executes first Outer query executes first
Outer query is dependent on inner Both are interdependent
query

New Section 1 Page 1


Join condition not mandatory Join condition is mandatory and
must be written in inner query
Outer query executes Once Outer query executes Twice .

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

New Section 1 Page 2


1. WAQTD dnames in which there are employees working .

SELECT DNAME
FROM DEPT D
WHERE D.DEPTNO IN ( SELECT E.DEPTNO
FROM EMP E
WHERE D.DEPTNO = E.DEPTNO ) ;

2. WAQTD dname in which there are no employees working .

SELECT DNAME
FROM DEPT D
WHERE D.DEPTNO NOT IN ( SELECT E.DEPTNO
FROM EMP E
WHERE D.DEPTNO = E.DEPTNO ) ;

EXISTS & NOT EXISTS OPERATORS :

1. EXISTS : " Exists Op is a Unary Op ( One Operand ) which can accept


One Operand Towards RHS and that Operand has to
be A Co-related Sub Query "
 Exists Op returns true if the Sub Query returns Any
value other than Null.

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

New Section 1 Page 3


30 = 20 False
30 = 10 False
30 = 20 False
30 = 30 True

40 = 20 False
40 = 10 False
40 = 20 False
40 = 30 False

2. NOT EXISTS : " Not Exists Op is a Unary Op ( One Operand )


which can accept
One Operand Towards RHS and that Operand has to be
A Co-related Sub Query "
 Not Exists Op returns true if the Sub Query returns NULL .

To find MAXIMUM salary :

SELECT SAL FROM EMP E1


WHERE ( SELECT COUNT( DISTINCT SAL ) FROM EMP E2
WHERE E1.SAL < E2.SAL ) = N-1 ;

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

New Section 1 Page 4


4000 4000
5000 5000

2nd , 4th , 5th , 7th MAX salary

SELECT SAL
FROM EMP E1
WHERE ( SELECT COUNT( DISTINCT SAL )
FROM EMP E2
WHERE E1.SAL < E2.SAL ) in ( 1 , 3, 4 , 6 ) ;

To find MINUMUM salary :

SELECT SAL
FROM EMP
E1
WHERE ( SELECT COUNT( DISTINCT SAL )
FROM EMP E2
WHERE E1.SAL > E2.SAL ) = N-1 ;

New Section 1 Page 5


New Section 1 Page 6

You might also like