copyright oracle corporation, 1999. all rights reserved. 6 subqueries

18
Copyright Oracle Corporation, 1999. All rights reserved. 6 6 Subqueries

Upload: lynn-james

Post on 17-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

Copyright Oracle Corporation, 1999. All rights reserved.

66

SubqueriesSubqueries

Page 2: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-2 Copyright Oracle Corporation, 1999. All rights reserved.

ObjectivesObjectives

After completing this lesson, you should After completing this lesson, you should be able to do the following:be able to do the following:

• Describe the types of problems that subqueries can solve

• Define subqueries

• List the types of subqueries

• Write single-row and multiple-row subqueries

After completing this lesson, you should After completing this lesson, you should be able to do the following:be able to do the following:

• Describe the types of problems that subqueries can solve

• Define subqueries

• List the types of subqueries

• Write single-row and multiple-row subqueries

Page 3: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-3 Copyright Oracle Corporation, 1999. All rights reserved.

Using a Subquery to Solve a ProblemUsing a Subquery to Solve a Problem

““Who has a salary greater than Jones’?”Who has a salary greater than Jones’?”““Who has a salary greater than Jones’?”Who has a salary greater than Jones’?”

“Which employees have a salary greater than Jones’ salary?”

Main Query

??

“What is Jones’ salary?”??

Subquery

Page 4: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-4 Copyright Oracle Corporation, 1999. All rights reserved.

SubqueriesSubqueries

• The subquery (inner query) executes once before the main query.

• The result of the subquery is used by the main query (outer query).

• The subquery (inner query) executes once before the main query.

• The result of the subquery is used by the main query (outer query).

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Page 5: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-5 Copyright Oracle Corporation, 1999. All rights reserved.

2975

SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

Using a SubqueryUsing a Subquery

ENAME----------KINGFORDSCOTT

ENAME----------KINGFORDSCOTT

Page 6: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-6 Copyright Oracle Corporation, 1999. All rights reserved.

Guidelines for Using SubqueriesGuidelines for Using Subqueries

• Enclose subqueries in parentheses.

• Place subqueries on the right side of the comparison operator.

• Do not add an ORDER BY clause to a subquery.

• Use single-row operators with single-row subqueries.

• Use multiple-row operators with multiple-row subqueries.

• Enclose subqueries in parentheses.

• Place subqueries on the right side of the comparison operator.

• Do not add an ORDER BY clause to a subquery.

• Use single-row operators with single-row subqueries.

• Use multiple-row operators with multiple-row subqueries.

Page 7: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-7 Copyright Oracle Corporation, 1999. All rights reserved.

Types of SubqueriesTypes of Subqueries• Single-row subquery• Single-row subquery

Main query

Subquery returnsreturns

CLERKCLERK

• Multiple-row subquery• Multiple-row subquery

CLERKCLERKMANAGERMANAGER

Main query

Subquery returnsreturns

• Multiple-column subquery• Multiple-column subquery

CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698

Main query

Subquery returnsreturns

Page 8: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-8 Copyright Oracle Corporation, 1999. All rights reserved.

Single-Row SubqueriesSingle-Row Subqueries

• Return only one row

• Use single-row comparison operators

• Return only one row

• Use single-row comparison operators

Operator

=

>

>=

<

<=

<>

Meaning

Equal to

Greater than

Greater than or equal to

Less than

Less than or equal to

Not equal to

Page 9: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-9 Copyright Oracle Corporation, 1999. All rights reserved.

Executing Single-Row SubqueriesExecuting Single-Row Subqueries

CLERK

1100

ENAME JOB---------- ---------MILLER CLERK

ENAME JOB---------- ---------MILLER CLERK

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);

Page 10: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-10 Copyright Oracle Corporation, 1999. All rights reserved.

Using Group Functions in a Subquery

Using Group Functions in a Subquery

800

ENAME JOB SAL---------- --------- ---------SMITH CLERK 800

ENAME JOB SAL---------- --------- ---------SMITH CLERK 800

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);

Page 11: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-11 Copyright Oracle Corporation, 1999. All rights reserved.

HAVING Clause with SubqueriesHAVING Clause with Subqueries

• The Oracle Server executes subqueries first.

• The Oracle Server returns results into the HAVING clause of the main query.

• The Oracle Server executes subqueries first.

• The Oracle Server returns results into the HAVING clause of the main query.

800

SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);

Page 12: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-12 Copyright Oracle Corporation, 1999. All rights reserved.

What Is Wrong with This Statement?

What Is Wrong with This Statement?

ERROR:ORA-01427: single-row subquery returns more thanone row

no rows selected

ERROR:ORA-01427: single-row subquery returns more thanone row

no rows selected

SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);

Single-row operator with

Single-row operator with

multiple-row subquery

multiple-row subquery

Page 13: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-13 Copyright Oracle Corporation, 1999. All rights reserved.

Will This Statement Work?Will This Statement Work?

no rows selectedno rows selected

Subquery returns no values

Subquery returns no values

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE');

Page 14: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-14 Copyright Oracle Corporation, 1999. All rights reserved.

Multiple-Row SubqueriesMultiple-Row Subqueries

• Return more than one row

• Use multiple-row comparison operators

• Return more than one row

• Use multiple-row comparison operators

Operator

IN

ANY

ALL

Meaning

Equal to any member in the list

Compare value to each value returned by

the subquery

Compare value to every value returned by

the subquery

Page 15: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-15 Copyright Oracle Corporation, 1999. All rights reserved.

Using ANY Operator in Multiple-Row Subqueries

Using ANY Operator in Multiple-Row Subqueries

9508001100

1300

EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';

Page 16: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-16 Copyright Oracle Corporation, 1999. All rights reserved.

Using ALL Operator in Multiple-Row Subqueries

Using ALL Operator in Multiple-Row Subqueries

2916.6667

2175

1566.6667

EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno);

Page 17: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-17 Copyright Oracle Corporation, 1999. All rights reserved.

SummarySummary

Subqueries are useful when a query is Subqueries are useful when a query is based on unknown values.based on unknown values.Subqueries are useful when a query is Subqueries are useful when a query is based on unknown values.based on unknown values.

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Page 18: Copyright  Oracle Corporation, 1999. All rights reserved. 6 Subqueries

6-18 Copyright Oracle Corporation, 1999. All rights reserved.

Practice OverviewPractice Overview

• Creating subqueries to query values based on unknown criteria

• Using subqueries to find out what values exist in one set of data and not in another

• Creating subqueries to query values based on unknown criteria

• Using subqueries to find out what values exist in one set of data and not in another