Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
13 views18 pages

Subquery Full Notes

Uploaded by

Lavesh Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views18 pages

Subquery Full Notes

Uploaded by

Lavesh Patil
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

SUB-QUERY

A QUERY WRITTEN INSIDE ANOTHER QUERY IS KNOWN AS SUB QUERY .

Working Principle :

Let us consider two queries Outer Query and Inner Query .


➢ Inner Query executes first and produces an Output .
➢ The Output of Inner Query is given / fed as an Input to Outer Query .
➢ The Outer Query generates the Result.
➢ Therefore we can state that 'the Outer Query is dependent on
Inner Query' and this is the Execution Principle of Sub Query .

Why / When Do we use SUB QUERY :

Case 1 : Whenever we have Unknowns present in the question, we use sub query
to find the Unknown .

Example :

EMP
EID ENAME SAL DEPTNO
1 ALLEN 1000 20
2 BLAKE 2000 10
3 CLARK 3000 30
4 MILLER 1500 10
5 SMITH 2500 10

1. WAQTD names of the employees earning more than 2500 .

SELECT ENAME
FROM EMP

New Section 1 Page 1


WHERE SAL > 2500 ;

2. WAQTD names of the employees earning less than MILLER .

SELECT ENAME
FROM EMP
WHERE SAL < ( SELECT SAL
FROM EMP
WHERE ENAME = 'MILLER' );

3. WAQTD name and deptno of the employees working in the same Dept as SMITH .

SELECT ENAME , DEPTNO


FROM EMP
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE ENAME ='SMITH' ) ;

4. WAQTD name and hiredate of the employees if the employee was hired after JONES .

SELECT ENAME , HIREDATEFROM EMP


WHERE HIREDATE > ( SELECT HIREDATE
FROM EMP
WHERE ENAME ='JONES' ) ;

5. WAQTD all the details of the employee working in the sameDesignation as KING .

SELECT * FROM EMP


WHERE JOB = ( SELECT JOB
FROM EMP
WHERE ENAME ='KING' );

6. WAQTD name , sal , deptno of the employees if the employees earning more than 2000 and work in
the same dept as JAMES .

SELECT ENAME , SAL , DEPTNOFROM EMP


WHERE SAL > 2000 AND DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE ENAME ='JAMES' ) ;

7. WAQTD all the details of the employees working in the Same designation as MILLER and
earning more than 1500.

SELECT * FROM EMP


WHERE SAL > 1500 AND JOB = (SELECT JOB
FROM EMP
WHERE ENAME ='MILLER' ) ;

New Section 1 Page 2


8. WAQTD details of the employees earning more than SMITH but less than KING .

SELECT *
FROM EMP
WHERE SAL > ( SELECT SAL
FROM EMP
WHERE ENAME ='SMITH' ) AND SAL < ( SELECT SAL
FROM EMP
WHERE ENAME ='KING' ) ;

9. WAQTD name , sal and deptno of the employees if the employee is


earning commission in dept 20 and earning salary more than Scott
.

SELECT ENAME , SAL , DEPTNO


FROM EMP
WHERE COMM IS NOT NULL AND DEPTNO = 20 AND
SAL > ( SELECT SAL
FROM EMP
WHERE ENAME ='SCOTT' ) ;

10. WAQTD name and hiredate of the employees who's name ends with'S' and hired after
James .

SELECT ENAME , HIREDATE


FROM EMP
WHERE ENAME LIKE '%S' AND
HIREDATE > ( SELECT HIREDATE
FROM EMP
WHERE ENAME ='JAMES' ) ;

11. WAQTD names of the employees working in the same dept as JAMES and earning salary more
than ADAMS and working in thesame job role as MILLER and hired after MARTIN .

SELECT ENAME
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO
FROM EMP
WHERE ENAME='JAMES') ANDSAL > (SELECT SAL
FROM EMP
WHERE ENAME= ‘ADAMS') ANDJOB = (SELECT JOB
FROM EMP
WHERE ENAME='MILLER') AND

New Section 1 Page 3


HIREDATE> (SELECT HIREDATE
FROM EMP
WHERE ENAME='MARTIN');

12. WAQTD all the details of the employees working as salesman in thedept
20 and earning commission more than Smith and hired after KING .

SELECT * FROM EMP


WHERE JOB ='SALESMAN' AND DEPTNO = 20 AND COMM > (SELECT
COMM
FROM EMP
WHERE ENAME ='SMITH') AND HIREDATE > (SELECT HIREDATE
FROM EMP
WHERE ENAME ='KING');

13. WAQTD number of employees earning more than SMITH and less
than MARTIN .

SELECT COUNT(*)FROM EMP


WHERE SAL > ( SELECT SAL
FROM EMP
WHERE ENAME ='SMITH') AND SAL < (SELECT SAL
FROM EMP
WHERE ENAME ='MARTIN')

14. WAQTD Ename and SAL for all the employees earning more than
JONES
SELECT ENAME , SAL
FROM EMP
WHERE SAL > (SELECT SAL
FROM EMP
WHERE ENAME =JONES') ;

15. WAQTD all the details of the employees working as a manager .

SELECT * FROM EMP


WHERE JOB
='MANAGER';

NOTE :
➢ In the Inner Query / Sub Query we cannot select more than
ONE column .
➢ The corresponding columns need not be same , but the
datatypes of those has to be same .

New Section 1 Page 4


SUBQUERY CASE 2

CASE-2 : Whenever the data to be selected and the condition to be executed are
present in different tables we use Sub Query .

Example :

Emp
EID ENAME SAL DEPTNO
1 ALLEN 1000 20 DEPT
2 BLAKE 2000 10 DEPTNO DNAME LOC
3 CLARK 3000 30 10 D1 L1
4 MILLER 1500 10 20 D2 L2
5 ADAMS 2500 20 30 D3 L3

1. WAQTD deptno of the employee whose name is Miller .

SELECT DEPTNO
FROM EMP
WHERE ENAME ='MILLER' ;

2. WAQTD dname of the employee whose name is Miller .

SELECT DNAME
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE ENAME ='MILLER' ) ;

3. WAQTD Location of ADAMS

SELECT LOC
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE ENAME ='ADAMS' ) ;

4. WAQTD names of the employees working in Location L2.

SELECT ENAME
FROM EMP
WHERE DEPTNO = ( SELECT DEPTNO
FROM DEPT
WHERE LOC ='L2' ) ;

5. WAQTD number of employees working in dept D3 .

SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = ( SELECT DEPTNO

New Section 1 Page 1


FROM DEPT
WHERE DNAME ='D3' ) ;

6. WAQTD ename , sal of all the employee earning more than Scott and working in dept 20 .

SELECT ENAME , SAL


FROM EMP
WHERE DEPTNO = 20 AND SAL > ( SELECT SAL FROM EMP
WHERE ENAME ='SCOTT' ) ;

7. WAQTD all the details of the employee working as a Manager In the dept Accounting .

SELECT *
FROM EMP
WHERE JOB ='MANAGER' AND DEPTNO = ( SELECT DEPTNO FROM DEPT
WHERE DNAME ='ACCOUNTING' ) ;

8. WAQTD all the details of the employee working in the samedesignation as Miller and
works in location New York .
SELECT *
FROM EMP
WHERE JOB = ( SELECT JOB FROM EMP WHERE ENAME ='MILLER' )
AND DEPTNO = ( SELECT DEPTNO FROM DEPT WHERE LOC ='NEW
YORK' ) ;

9. WAQTD number of employees working as a clerk in the samedeptno as SMITH and earning
more than KING hired after MARTIN in the location BOSTON .
SELECT COUNT(*)
FROM EMP
WHERE JOB ='CLERK' AND DEPTNO = ( SELECT DEPTNO FROM EMP
WHERE ENAME ='SMITH') AND
SAL > ( SELECT SAL FROM EMP WHERE ENAME ='KING' ) AND
HIREDATE > ( SELECT HIREDATE
FROM EMP WHERE ENAME ='MARTIN' )
AND DEPTNO = ( SELECT DEPTNO FROM DEPT WHERE LOC
='BOSTON' ) ;

10. WAQTD maximum salary given to a person working in DALLAS .

SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = ( SELECT DEPTNO
FROM DEPT
WHERE LOC ='DALLAS' ) ;

New Section 1 Page 2


MAX & MIN

EID ENAME SAL DEPTNO


1 ALLEN 1000 20
2 BLAKE 2000 10
3 CLARK 3000 30
4 MILLER 1500 10
5 ADAMS 2500 20

1. WAQTD maximum salary of an employee .

SELECT MAX( SAL )


FROM EMP ;

2. WAQTD name of the employee getting maximum salary .

SELECT ENAME , MAX( SAL )


FROM EMP ;

SELECT ENAME
FROM EMP
WHERE SAL = MAX( SAL ) ;

SELECT ENAME
FROM EMP
WHERE SAL = ( SELECT MAX( SAL )
FROM EMP ) ;

3. WAQTD name and salary earned by the employee getting


Minimum salary .

SELECT ENAME , SAL


FROM EMP
WHERE SAL = ( SELECT MIN( SAL )
FROM EMP ) ;

New Section 1 Page 11


TYPES OF SUB - QUERY

1. SINGLE ROW SUB QUERY


2. MULTI ROW SUB QUERY

Examples :

Emp
EID ENAME SAL DEPTNO
1 ALLEN 1000 20 DEPT
2 BLAKE 2000 10 DEPTNO DNAME LOC
3 CLARK 3000 30 10 D1 L1
4 MILLER 1500 10 20 D2 L2
5 SMITH 2500 10 30 D3 L3

1. WAQTD dname of ALLEN(single row) .

SELECT DNAME 20
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE ENAME = 'ALLEN' ) ;

2. WAQTD dnames of Allen and Smith(multi row).

20
10
SELECT DNAME
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
DEPTNO WHERE ENAME IN
20 ( 'ALLEN' ,'SMITH' ) ) ;
10
Here , since the sub query returns
30 2 records we cannot use '=' Op .
10 We've to use IN Op .
10

New Section 1 Page 7


1. SINGLE ROW SUB QUERY :

➢ If the sub query returns exactly 1 record / value we call it


asSingle Row Sub Query .
➢ If it returns only 1 value then we can use the normal
operators Or the Special Operators to compare the values .

2. MULTI ROW SUB QUERY :


➢ If the sub query returns more than1 record / value we call
itas Multi Row Sub Query .
➢ If it returns more than 1 value then we cannot use the
normal operators We have to use only Special Operators to
compare the values .

Note : It is difficult to identify whether a query Belongs Single or Multi


row So , it is always recommended to use Special Operators to
Compare The values .

1. WAQTD ename and salary of the employees earning more than


Employees of dept 10 .

EID ENAME SAL DEPTNO


1 ALLEN 1000 20
2 BLAKE 2000 10
3 CLARK 3000 30
4 MILLER 1500 10
5 SMITH 2500 10

2000
1500
SELECT ENAME , SAL
FROM EMP 2500
WHERE SAL > ( SELECT SAL
FROM EMP
WHERE DEPTNO = 10 ) ;

New Section 1 Page 8


Here we cannot use > symbol to
compareMultiple values .

We cant use IN or. NOT IN as well


because It is used for = and != symbols
.

Therefore we have to use Sub Query


Sub Query Operators
Operators
For Comparing Relational Operators
1. ALL : such as( > , < , >= , <= ) .

"It is special Op used along with a relational Op ( > , < , > = , <= )
to compare the values present at the RHS ".
➢ ALL Op returns true if all the values at the RHS have satisfied the
condition .

Example :
2000
CLARK ,3000 1500
2500
SELECT ENAME , SAL
FROM EMP
WHERE SAL > ALL ( SELECT SAL
FROM EMP
WHERE DEPTNO = 10 ) ;

New Section 1 Page 9


SAL
1000
2000 1000 > ALL ( 2000 , 1500 , 2500 )
3000
1500 1000 > 2000 False
2500 1000 > 1500 False
1000 > 2500 False

2000 > ALL ( 2000 , 1500 , 2500 )

2000 > 2000 False


2000 > 1500 True
2000 > 2500 False

3000 > ALL ( 2000 , 1500 , 2500 )

3000 > 2000 True


3000 > 1500 True
3000 > 2500 True

1500 > ALL ( 2000 , 1500 , 2500 )

1500 > 2000 False


1500 > 1500 False
1500 > 2500 False

2500 > ALL ( 2000 , 1500 , 2500 )

2500 > 2000 True


2500 > 1500 True
2500 > 2500 False

2. ANY :

"It is special Op used along with a relational Op ( > , < , > = , <= )
to compare the values present at the RHS ".
• ANY Op returns true if one of the values at the RHS have satisfied
the condition .

New Section 1 Page


Example :
2000
1500
SELECT ENAME , SAL 2500
FROM EMP
WHERE SAL > ANY ( SELECT SAL
FROM EMP
SAL WHERE DEPTNO = 10 ) ;
1000
2000 1000 > ANY ( 2000 , 1500 , 2500 )
3000
1500 1000 > 2000 False
2500 1000 > 1500 False
1000 > 2500 False

2000 > ANY ( 2000 , 1500 , 2500 )

2000 > 2000 False


2000 > 1500 True
2000 > 2500 False

3000 > ANY ( 2000 , 1500 , 2500 )

3000 > 2000 True


3000 > 1500 True
3000 > 2500 True

1500 > ANY ( 2000 , 1500 , 2500 )

1500 > 2000 False


1500 > 1500 False
1500 > 2500 False

2500 > ANY ( 2000 , 1500 , 2500 )

2500 > 2000 True


2500 > 1500 True
2500 > 2500 False

1. WAQTD name of the employee if the employee earns less


thanThe employees working as salesman .

SELECT ENAME
FROM EMP
WHERE SAL < ALL ( SELECT SAL

New Section 1 Page


FROM EMP
WHERE JOB='SALESMAN' ) ;

2. WAQTD name of the employee if the employee earns less


thanAt least a salesman .

SELECT ENAME
FROM EMP
WHERE SAL < ANY ( SELECT SAL
FROM EMP
WHERE JOB ='SALESMAN' ) ;

3. WAQTD names of the employees earning more than ADAMS .

SELECT ENAME
FROM EMP
WHERE SAL > ALL ( SELECT SAL
FROM EMP
WHERE ENAME ='ADAMS' ) ;

New Section 1 Page


NESTED SUB QUERY

A sub query written inside a sub query is known as Nested Subquery.


➢ WE CAN NEST ABOUT 255 SUB QUERIES

SAL
1000
2000
4000
3000
5000

3. WAQTD maximum salary given to an employee .


SELECT MAX( SAL )FROM EMP ;
4. WAQTD second maximum salary given to an employee .
SELECT MAX( SAL )
FROM EMP
WHERE SAL < ( SELECT MAX( SAL)
FROM EMP ) ;
SAL
1000
2000
4000
3000
5000

5. WAQTD 3rd maximum salary .

SELECT MAX( SAL ) 3000FROM EMP


WHERE SAL < ( SELECT MAX( SAL ) 4000FROM EMP
WHERE SAL < ( SELECT MAX( SAL ) 5000FROM EMP ) )

6. WAQTD 4th maximum salary .

SELECT MAX( SAL ) 2000FROM EMP


WHERE SAL < ( SELECT MAX( SAL ) 3000FROM EMP
WHERE SAL < ( SELECT MAX( SAL ) 4000FROM EMP
WHERE SAL < ( SELECT MAX( SAL ) 5000FROM EMP ) ) )

7. WAQTD 3 minimum salary .

SELECT MIN(SAL )FROM EMP


WHERE SAL > ( SELECT MIN(SAL )FROM EMP
WHERE SAL > ( SELECT MIN ( SAL )
FROM EMP ) ) ;
New Section 1 Page 1
8. WAQTD Dept name of the employee getting 2nd Minimumsalary .

SELECT DNAMEFROM DEPT


WHERE DEPTNO = ( SELECT DEPTNOFROM EMP
WHERE SAL = (SELECT MIN( SAL )FROM EMP
WHERE SAL > ( SELECT MIN( SAL )
FROM EMP ) ) );

REMEMBER :

MAXIMUM MAX( ) <


MINIMUM MIN( ) >

New Section 1 Page 2


EMPLOYEE AND MANAGER RELATION

CASE 1 : TO IDENTIFY MANAGER

➢ WAQTD name of Allen's manager .

JAMES
SELECT ENAME
FROM EMP 3
WHERE EID = ( SELECT MGR
FROM EMP
WHERE ENAME ='ALLEN' )

EID ENAME MGR EID


1 ALLEN 3 1
2 SMITH 1
2
3 JAMES 2
3
4 KING 3
4

➢ WAQTD name of SMITH's manager .

SELECT ENAME
FROM EMP
WHERE EID = ( SELECT MGR
FROM EMP
WHERE ENAME ='SMITH' ) ;

➢ WAQTD name of SMITH's manager's manager .

EID ENAME MGR


1 ALLEN 3
2 SMITH 1
3 JAMES 2
4 KING 3

SELECT ENAME
FROM EMP
WHERE EID = ( SELECT MGR
FROM EMP
WHERE EID = ( SELECT MGR
FROM EMP

New Section 1 Page 3


WHERE ENAME ='SMITH' ) ) ;

➢ WAQTD dname of King's Manager .

SELECT DNAME
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE EID = ( SELECT MGR
FROM EMP
WHERE ENAME ='KING' ) ) ;

➢ WAQTD Location of Adams's manager's manager .

SELECT LOC
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE EID = ( SELECT MGR
FROM EMP
WHERE EID = ( SELECT MGR
FROM EMP
WHERE ENAME ='ADAMS' ) ) ) ;

CASE -2: TO IDENTIFY EMPLOYEES REPORTING TO A MANAGER

➢ WAQTD Names of the employees reporting to KING.

SELECT ENAME
FROM EMP
WHERE MGR = ( SELECT EID
FROM EMP
WHERE ENAME ='KING' ) ;

➢ WAQTD Name and salary given to the employees reporting


To James .

SELECT ENAME , SAL


FROM EMP
WHERE MGR = ( SELECT EID
FROM EMP
WHERE ENAME ='JAMES' ) ;

To find Manager Select MGR in Sub Q


To find Employees Select EID in Sub Q

➢ WAQTD dname of the employee reporting to President .

SELECT DNAME
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO

New Section 1 Page 4


FROM EMP
WHERE MGR = ( SELECT EID
FROM EMP
WHERE JOB ='PRESIDENT' ) ) ;

➢ WAQTD Department details of the employees who are


reportingto MILLER .

SELECT *
FROM DEPT
WHERE DEPTNO = ( SELECT DEPTNO
FROM EMP
WHERE MGR = ( SELECT EID
FROM EMP
WHERE ENAME ='MILLER' ));

New Section 1 Page 1

You might also like