Top Banner
7 Copyright © 2009, Oracle. All rights reserved. Using Subqueries to Solve Queries
25

Subconsultas

Apr 12, 2017

Download

Software

maria
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Subconsultas

7Copyright © 2009, Oracle. All rights reserved.

Using Subqueries to Solve Queries

Page 2: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 2

Objectives

After completing this lesson, you should be able to do the following:• Define subqueries• Describe the types of problems that the subqueries can

solve• List the types of subqueries• Write single-row and multiple-row subqueries

Page 3: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 3

Lesson Agenda

• Subquery: Types, syntax, and guidelines• Single-row subqueries:

– Group functions in a subquery– HAVING clause with subqueries

• Multiple-row subqueries– Use ALL or ANY operator.

• Using the EXISTS operator• Null values in a subquery

Page 4: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 4

Using a Subquery to Solve a Problem

Who has a salary greater than Abel’s?

Which employees have salaries greater than Abel’s salary?

Main query:

What is Abel’s salary?

Subquery:

Page 5: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 5

Subquery Syntax

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

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

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Page 6: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 6

SELECT last_name, salaryFROM employeesWHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

Using a Subquery

11000

Page 7: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 7

Guidelines for Using Subqueries

• Enclose subqueries in parentheses.• Place subqueries on the right side of the comparison

condition for readability. (However, the subquery can appear on either side of the comparison operator.)

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

Page 8: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 8

Types of Subqueries

• Single-row subquery

• Multiple-row subquery

Main query

Subquery returns

ST_CLERK

ST_CLERKSA_MAN

Main query

Subquery returns

Page 9: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 9

Lesson Agenda

• Subquery: Types, syntax, and guidelines• Single-row subqueries:

– Group functions in a subquery– HAVING clause with subqueries

• Multiple-row subqueries– Use ALL or ANY operator

• Using the EXISTS operator• Null values in a subquery

Page 10: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 10

Single-Row Subqueries

• Return only one row• Use single-row comparison operators

Greater than or equal to >=

Less than <

Less than or equal to <=

Equal to =

Not equal to <>

Greater than >

MeaningOperator

Page 11: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 11

SELECT last_name, job_id, salaryFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Taylor')AND salary > (SELECT salary FROM employees WHERE last_name = 'Taylor');

Executing Single-Row Subqueries

SA_REP

8600

Page 12: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 12

SELECT last_name, job_id, salaryFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees);

Using Group Functions in a Subquery

2500

Page 13: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 13

SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);

HAVING Clause with Subqueries

• The Oracle server executes the subqueries first.• The Oracle server returns results into the HAVING clause

of the main query.

2500

Page 14: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 14

SELECT employee_id, last_nameFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);

What Is Wrong with This Statement?

Single-row operator with multiple-row

subquery

Page 15: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 15

SELECT last_name, job_idFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Haas');

No Rows Returned by the Inner Query

Subquery returns no rows because there is no employee named “Haas.”

Page 16: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 16

Lesson Agenda

• Subquery: Types, syntax, and guidelines• Single-row subqueries:

– Group functions in a subquery– HAVING clause with subqueries

• Multiple-row subqueries– Use IN, ALL, or ANY

• Using the EXISTS operator• Null values in a subquery

Page 17: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 17

Multiple-Row Subqueries

• Return more than one row• Use multiple-row comparison operators

Must be preceded by =, !=, >, <, <=, >=. Compares a value to every value in a list or returned by a query. Evaluates to TRUE if the query returns no rows.

ALL

Equal to any member in the listIN

Must be preceded by =, !=, >, <, <=, >=. Compares a value to each value in a list or returned by a query. Evaluates to FALSE if the query returns no rows.

ANY

MeaningOperator

Page 18: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 18

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';

Using the ANY Operatorin Multiple-Row Subqueries

9000, 6000, 4200

Page 19: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 19

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';

Using the ALL Operatorin Multiple-Row Subqueries

9000, 6000, 4200

Page 20: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 20

SELECT * FROM departmentsWHERE NOT EXISTS(SELECT * FROM employees WHERE employees.department_id=departments.department_id);

Using the EXISTS Operator

Page 21: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 21

Lesson Agenda

• Subquery: Types, syntax, and guidelines• Single-row subqueries:

– Group functions in a subquery– HAVING clause with subqueries

• Multiple-row subqueries– Use ALL or ANY operator

• Using the EXISTS operator• Null values in a subquery

Page 22: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 22

SELECT emp.last_nameFROM employees empWHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);

Null Values in a Subquery

Page 23: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 24

Quiz

Using a subquery is equivalent to performing two sequential queries and using the result of the first query as the search values in the second query.1. True2. False

Page 24: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 25

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Summary

In this lesson, you should have learned how to:• Identify when a subquery can help solve a problem• Write subqueries when a query is based on unknown

values

Page 25: Subconsultas

Copyright © 2009, Oracle. All rights reserved.7 - 26

Practice 7: Overview

This practice covers the following topics:• Creating subqueries to query values based on unknown

criteria• Using subqueries to find out the values that exist in one set

of data and not in another