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

Subqueries

This document discusses using subqueries to solve queries. It covers: defining subqueries; single-row vs multiple-row subqueries; using comparison operators like =, >, IN, ALL, ANY with subqueries; group functions and HAVING clauses in subqueries; handling null values; and syntax for writing subqueries. The goal is to describe how subqueries can help solve problems by returning unknown values from an inner query to use in an outer query's WHERE clause.

Uploaded by

erickarthik
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
970 views

Subqueries

This document discusses using subqueries to solve queries. It covers: defining subqueries; single-row vs multiple-row subqueries; using comparison operators like =, >, IN, ALL, ANY with subqueries; group functions and HAVING clauses in subqueries; handling null values; and syntax for writing subqueries. The goal is to describe how subqueries can help solve problems by returning unknown values from an inner query to use in an outer query's WHERE clause.

Uploaded by

erickarthik
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 22

Using Subqueries to Solve

Queries
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
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
• Null values in a subquery
Using a Subquery to Solve a
Problem

• Who has a salary greater than Abel’s?


Main query:

Which employees have salaries greater than Abel’s


salary?

Subquery:

What is Abel’s salary?


Subquery Syntax

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);

• The subquery (inner query) executes before the


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

SELECT last_name, salary


FROM employees 11000
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = 'Abel');
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.
Types of Subqueries

– Single-row subquery
Main query
returns
Subquery ST_CLERK

Main query
– Multiple-row subquery
returns
Subquery ST_CLERK
SA_MAN
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
• Null values in a subquery
Single-Row Subqueries

• Return only one row


• Use single-row comparison operators

•Operat •Meaning

or = •Equal to
• > •Greater than
• >= •Greater than or
• < •equal
Less to
than
• <= •Less than or equal
• <> •toNot equal to
Executing Single-Row
Subqueries

SELECT last_name, job_id, salary


FROM employees
WHERE job_id = SA_REP
(SELECT job_id
FROM employees
WHERE last_name = ‘Taylor’)
AND salary > 8600
(SELECT salary
FROM employees
WHERE last_name = ‘Taylor’);
Using Group Functions in a
Subquery

SELECT last_name, job_id, salary


FROM employees 2500
WHERE salary =
(SELECT MIN(salary)
FROM employees);
The HAVING Clause with
Subqueries

• The Oracle server executes the subqueries first.


• The Oracle server returns results into the HAVING clause of the main
query.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id 2500
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);


What Is Wrong with This
Statement?

SELECT employee_id, last_name


FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);

Single-row operator
with multiple-row
subquery
No Rows Returned by the
Inner Query

SELECT last_name, job_id


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

Subquery returns no rows because there is no


employee named “Haas.”
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
• Null values in a subquery
Multiple-Row Subqueries

• Return more than one row


• Use multiple-row comparison operators
•Operator •Meaning
•IN •Equal to any member in the list
•ANY •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.

•ALL •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.
Using the ANY Operator
in Multiple-Row Subqueries

SELECT employee_id, last_name, job_id, salary


FROM employees 9000, 6000, 4200
WHERE salary < ANY
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';


Using the ALL Operator
in Multiple-Row Subqueries

SELECT employee_id, last_name, job_id, salary


FROM employees 9000, 6000, 4200
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
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
• Null values in a subquery
Null Values in a Subquery

SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM employees mgr);
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

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);

You might also like