
- •Objectivesj i
- •Usingi a Subquery to Solvel a Probleml
- •Subqueriesi
- •Usingi a Subquery
- •Guidelinesi li for Usingi Subqueriesi
- •Types of Subqueriesi
- •Singlei le-Row Subqueriesi
- •Executingi Singlei le-Row Subqueriesi
- •Usingi Group Functionsi
- •HAVINGI Clausel withi Subqueriesi
- •What IsIs Wrong
- •Willill Thisis Statement Work?
- •Multiplel i le-Row Subqueriesi
- •Usingi ANY Operator inin Multiplel i le-Row Subqueriesi
- •Usingi ALL Operator inin Multiplel i le-Row Subqueriesi
- •Summary
- •Practicei Overviewi

6
Subqueries

Objectivesj i
After completing this lesson, you should be able to do the following:
•• Describeri thet typest off problemsr l thatt t subqueriesri can solvel
•• Definefi subqueriesri
•• Listi t thet typest off subqueriesri
•• Writerite singlei le--rowr and multiplelti le--rowr subqueriesri
6-2

Usingi a Subquery to Solvel a Probleml
“Who has a salaryl greater than Jones’s?”’
Main Query
? |
“Which employees have a salary greater |
||
than Jones’s salary?” |
|||
|
|||
|
Subquery |
|
|
|
? |
“What is Jones’s salary?” |
|
|
|
6-3

Subqueriesi
|
|
|
|
|
|
SELECT |
select_list |
|
|
|
FROM |
table |
|
|
|
WHERE |
expr operator |
|
|
|
|
(SELECT |
select_list |
|
|
|
FROM |
table); |
|
|
|
|
|
|
|
|
|
|
|
•• TheThesubquerysubquery(inner(innerquery)query)executesexecutesonceoncebeforebeforethethemainainqueryquery..
•• TheTheresultresultofofthethesubquerysubqueryisisusedusedbybythethemainainqueryquery(outer(outer query)query)..
6-4

Usingi a Subquery
SQL> |
SELECT |
ename |
|
2 |
FROM |
emp |
2975 |
3 |
WHERE |
sal |
> |
4 |
(SELECT sal |
|
5 |
FROM |
emp |
6 |
WHERE |
empno=7566); |
ENAME
----------
KING
FORD
SCOTT
6-5

Guidelinesi li for Usingi Subqueriesi
•• Enclosel subqueriesri inin parenthesesr t ..
•• Placel subqueriesri on thet rightri t sidei off thet comparisonri operatorr t r..
•• Do nott add an ORDER BY clausel toto a subqueryry..
•• Use singlei le--rowr operatorsr t rs withith singlei le-- rowr subqueriesri ..
•• Use multiplelti le--rowr operatorsr t rs withith multiplelti le--rowr subqueriesri ..
6-6

Types of Subqueriesi
•• Singlei le--rowr subqueryry
Main query
returns
Subquery
•• Multiplelti le--rowr subqueryry
Main query
returns
Subquery
•• Multiplelti le--columnl subqueryry
Main query
returns
Subquery
6-7
CLERK
CLERK
MANAGER
CLERK 7900 MANAGER 7698

Singlei le-Row Subqueriesi
•• Returnt rn onlyly one rowr
•• Use singlei le--rowr comparisonri operatorsr t rs
Operator Meaning
=Equal to
>Greater than
>= |
Greater than or equal to |
<Less than
<= |
Less than or equal to |
|
|
<> |
Not equal to |
6-8

Executingi Singlei le-Row Subqueriesi
SQL> |
SELECT |
ename, job |
|
2 |
FROM |
emp |
CLERK |
3 |
WHERE |
job = |
|
4 |
|
(SELECT |
job |
5 |
|
FROM |
emp |
6 |
|
WHERE |
empno = 7369) |
7 |
AND |
sal > |
1100 |
8 |
|
(SELECT |
sal |
9 |
|
FROM |
emp |
10 |
|
WHERE |
empno = 7876); |
ENAME JOB
---------- ---------
MILLER CLERK
6-9

Usingi Group Functionsi
inin a Subquery
SQL> |
SELECT |
ename, job, sal |
800 |
|
2 |
FROM |
emp |
||
|
||||
3 |
WHERE |
sal = |
|
|
4 |
|
(SELECT |
MIN(sal) |
|
5 |
|
FROM |
emp); |
ENAME |
JOB |
SAL |
---------- |
--------- --------- |
|
SMITH |
CLERK |
800 |
6-10

HAVINGI Clausel withi Subqueriesi
•• The Oracler le Serverr r executest subqueriesri firstfir t..
•• The Oracler le Serverr r returnsr t r resultsr lts intoi to thet mainin query’sr ’s HAVINGI clausel ..
SQL> |
SELECT |
deptno, MIN(sal) |
|
2 |
FROM |
emp |
|
3 |
GROUP BY |
deptno |
800 |
4 |
HAVING |
MIN(sal) > |
|
5 |
|
(SELECT |
MIN(sal) |
6 |
|
FROM |
emp |
7 |
|
WHERE |
deptno = 20); |
6-11