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

FoDB - Lab 4- Subquery & Multiple Tables Query

Uploaded by

dekebagonji885
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)
3 views

FoDB - Lab 4- Subquery & Multiple Tables Query

Uploaded by

dekebagonji885
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/ 22

Using Sub queries to Solve Queries

&
Displaying Data from Multiple tables
Objectives

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


following:
• Describe the types of problems that the subqueries can
solve
• List the types of subqueries
• Write single-row and multiple-row subqueries
• Display data from multiple tables
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

• Multiple-row subquery
Main query
returns ST_CLERK
Subquery
SA_MAN
Single-Row Subqueries

• 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
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 = ‘Abel’)
AND salary > 8600
(SELECT salary
FROM employees
WHERE last_name = ‘Abel’);
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
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';
Obtaining Data from Multiple Tables

EMPLOYEES DEPARTMENTS


Creating Joins with the ON Clause

• The join condition for the natural join is basically an equijoin


of all columns with the same name.
• Use the ON clause to specify arbitrary conditions or specify
columns to join.
• The join condition is separated from other search conditions.
• The ON clause makes code easy to understand.
Retrieving Records with the ON Clause

SELECT e.employee_id, e.last_name, e.department_id,


d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);


Creating Three-Way Joins with
the ON Clause

SELECT employee_id, city, department_name


FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;


Applying Additional Conditions
to a Join
Use the AND clause or the WHERE clause to apply additional
conditions:
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149 ;

Or
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
WHERE e.manager_id = 149 ;
Joining a Table to Itself

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

… …

MANAGER_ID in the WORKER table is equal to


EMPLOYEE_ID in the MANAGER table.
Self-Joins Using the ON Clause

SELECT worker.last_name emp, manager.last_name mgr


FROM employees worker JOIN employees manager
ON (worker.manager_id = manager.employee_id);

You might also like