e computer notes - Advanced Sub Queries
-
Upload
ecomputernotes -
Category
Documents
-
view
233 -
download
0
Transcript of e computer notes - Advanced Sub Queries
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 1/26
Advanced Subqueries
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 2/26
Objectives
After completing this lesson, you should be ableto do the following:
" Write a multiple-column subquery
" Describe and explain the behavior of subqueries when
null values are retrieved
" Write a subquery in a FROM clause
" Use scalar subqueries in SQL
" Describe the types of problems that can be solved with
correlated subqueries
" Write correlated subqueries
" Update and delete rows using correlated subqueries
" Use the EXISTS and NOT EXISTS operators
" Use the WITH clause
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 3/26
What Is a Subquery?
A subquery is a SELECT statement embedded in aclause of another SQL statement.
Main SELECT ...query FROM ...
WHERE ...(SELECT ... Subquery
FROM ...
WHERE ...)
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 4/26
Subqueries
SELECT select_list
FRO M table
WHERE expr operator (SELECT select_list
FRO M table);
"The subquery (inner query) executes once before
the main query.
"The result of the subquery is used by the main
query (outer query).
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 5/26
Using a Subquery
SELECT last_name10500FROM employees
WHERE salary >
(SELECT salary
FROM employees
WHERE employee_id = 149) ;
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 6/26
Multiple-Column Subqueries
Main query
WHERE (MANAGER_ID, DEPARTMENT_ID) IN
Subquery
100 90
102 60124 50
Each row of the main query is compared to
values from avalues from a multiple-row and multiplecolumnsubquery.
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 7/26
Column Comparisons
Column comparisons in a multiple-column subquerycan be:
" Pairwise comparisons
" Nonpairwise comparisons
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 8/26
Pairwise Comparison Subquery
isplay the details of the employees who are managed
y the same manager and work in the same department
s the employees with EMPLOYEE_ID 178 or 174.
ECT employee_id, manager_id, department_id
M employees
ERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM employees
WHERE employee_id IN (178,174))D employee_id NOT IN (178,174);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 9/26
Nonpairwise Comparison Subquery
play the details of the employees who are managed by
e same manager as the employees with EMPLOYEE_ID
4 or 141 and work in the same department as the
mployees with EMPLOYEE_ID 174 or 141.
ELECT employee_id, manager_id, department_id
ROM employees
HERE manager_id IN(SELECT manager_id
FROM employees
WHERE employee_id IN (174,141))
ND department_id IN
(SELECT department_idFROM employees
WHERE employee_id IN (174,141))
ND employee_id NOT IN(174,141);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 10/26
Using a Subquery
in the FROM Clause
SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECTdepartment_id,AVG(salary) salavgFROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_idAND a.salary > b.salavg;
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 11/26
Scalar Subquery Expressions
A scalar subquery expression is a subquery that
returns exactly one column value from one row.
Scalar subqueries were supported in Oracle8i only in a
limited set of cases, For example:
SELECT statement (FROM and WHERE clauses) ±
ALUES list of an INSERT statement "In Oracle9i ,
alar subqueries can be used in:
Condition and expression part of DECODE and CASE
All clauses of SELECT except GROUP BY
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 12/26
Scalar Subqueries: Examples
alar Subqueries in CASE Expressions
LECT employee_id, last_name,
(CASE20
WHEN department_id =
(SELECT department_id FROM departmentsWHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) locationOM employees;
alar Subqueries in ORDER BY Clause
LECT employee_id, last_name
OM employees e
DER BY (SELECT department_nameFROM departments d
WHERE e.department_id = d.department_id);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 13/26
Correlated Subqueries
Correlated subqueries are used for row-by-rowprocessing. Each subquery is executed once for
every row of the outer query.
GET
candidate row from outer query
EXECUTE
inner query using candidate row value
USEvalues from inner query to qualify ordisqualify candidate row
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 14/26
Correlated Subqueries
ELECT column1, column2, ...
ROM table1 outer
WHERE column1 operator
(SELECT colum1, column2
FROM table2WHERE expr1 =
outer .expr2);
he subquery references a column from a table in
e parentthe parent query.the parent query.
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 15/26
Using Correlated Subqueries
Find all employees who earn more than the averagealary in their department.
SELECT last_name, salary, department_idFROM employees outer
WHERE salary >
(SELECT AVG(salary)
FROM employeesWHERE department_id =
outer.department_id) ;
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 16/26
Using Correlated Subqueries
splay details of those employees who have switchedbs at least twice.
LECT e.employee_id, last_name,e.job_id
ROM employees e
HERE 2 <= (SELECT COUNT(*)FROM job_history
WHERE employee_id = e.employee_id);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 17/26
Using the EXISTS Operator
"The EXISTS operator tests for existence of rows in
the results set of the subquery.
"If a subquery row value is found:
The search does not continue in the inner query
The condition is flagged TRUE
"If a subquery row value is not found:
The condition is flagged FALSE The
search continues in the inner query
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 18/26
Using the EXISTS Operator
nd employees who have at least one personporting to them.
ELECT employee_id, last_name, job_id, department_idROM employees outer
WHERE EXISTS ( SELECT 'X'
FROM employees
WHERE manager_id =
outer.employee_id);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 19/26
Using the NOT EXISTS Operator
nd all departments that do not have any employees.
ELECT department_id, department_name
ROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM employees
WHERE department_id= d.department_id);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 20/26
Correlated UPDATE
PDATE table1 alias1
T column = (SELECT expression
FROM table2 alias2WHERE alias1.column =alias2.column );
e a correlated subquery to update rows in one
ble based on rows from another table.
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 21/26
Correlated UPDATE
" Denormalize the EMPLOYEES table by adding a
column to store the department name.
" Populate the table by using a correlated
update.
ALTER TABLE employeesADD(department_name VARCHAR2(14));
UPDATE employees e
SET department_name =
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 22/26
Correlated DELETE
DELETE FROM table1 alias1 WHERE
column operator (SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);
e a correlated subquery to delete rows in one table
sed on rows from another table.
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 23/26
Correlated DELETE
a correlated subquery to delete only those rows
om the EMPLOYEES table that also exist in the
MP_HISTORY table.
ELETE FROM employees E
HERE employee_id = (SELECT
mployee_id FROM emp_history
WHERE employee_id = E.employee_id);
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 24/26
The WITH Clause
" Using the WITH clause, you can use the same
query block in a SELECT statement when it occursmore than once within a complex query.
" The WITH clause retrieves the results of a query
block and stores it in the user's temporarytablespace.
" The WITH clause improves performance
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 25/26
WITH Clause: Example
Using the WITH clause, write a query to display thedepartment name and total salaries for thosedepartments whose total salary is greater than the
average salary across departments.
http://ecomputernotes.com
8/3/2019 e computer notes - Advanced Sub Queries
http://slidepdf.com/reader/full/e-computer-notes-advanced-sub-queries 26/26
WITH Clause: Example
ITHpt_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FRO M employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name),
g_cost AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avgFRO M dept_costs)
LECT *
ROM dept_costs WHERE
pt_total > (SELECT
pt_avg
FRO M avg_cost )
RDER BY department_name;
http://ecomputernotes.com