Professional Documents
Culture Documents
SQL Nested
SQL Nested
2022)
LALA RUKH AHSAN 1
LESSON’S OUTLINE
Advanced SQLizing
studio_id director_id
1 1
2 2
2 10
3 1
3 9
67.5 70 -2.5
Great Escape
Upside Down 54 50 4
Green Warrior 96 80 16
Blue Oranges 28 7 21
Example:
Select studio_id, count(*)
From Movies
Group By studio_id
Order By studio_id
Example:
Query: Select sum(budget)
From movies
Where studio_id = 3
Output: Sum(budget)
---------------
65.1
LALA RUKH AHSAN 11
AGGREGATION
SELECT
SELECT avg(price)
avg(price) SELECT
SELECT count(*)
count(*)
FROM
FROM Product
Product FROM
FROM Product
Product
WHERE
WHERE maker=“Toyota”
maker=“Toyota” WHERE
WHERE year
year>>2020
2020
We probably want:
SELECT
SELECT Count(DISTINCT
Count(DISTINCTcategory)
category)
FROM
FROM Product
Product
WHERE
WHERE year
year>>2020
2020
SELECT
SELECT Sum(price
Sum(price**quantity)
quantity)
FROM
FROM Purchase
Purchase
SELECT
SELECT Sum(price
Sum(price**quantity)
quantity)
FROM
FROM Purchase
Purchase
WHERE
WHERE product
product==‘mobile’
‘mobile’
SELECT
SELECT Sum(price
Sum(price**quantity)
quantity)
FROM
FROM Purchase
Purchase 50 (= 20+30)
WHERE product==‘‘mobile
WHERE product mobile’’
LALA RUKH AHSAN 15
GROUPING AND
AGGREGATION
Purchase(product, date, price, quantity)
SELECT
SELECT product,
product,Sum(price*quantity)
Sum(price*quantity)AS
ASTotalSales
TotalSales
FROM
FROM Purchase
Purchase
WHERE
WHERE date
date>>‘10/1/2020’
‘10/1/2020’
GROUP
GROUPBY
BY product
product
SELECT
SELECT product,
product,Sum(price*quantity)
Sum(price*quantity)AS
ASTotalSales
TotalSales
FROM
FROM Purchase
Purchase
WHERE
WHERE date
date>>‘10/1/2005’
‘10/1/2005’
GROUP
GROUPBY
BY product
product
SELECT
SELECT product,
product,
sum(price
sum(price**quantity)
quantity)AS
ASSumSales
SumSales
max(quantity)
max(quantity)AS
ASMaxQuantity
MaxQuantity
FROM
FROM Purchase
Purchase
GROUP
GROUPBY
BYproduct
product
SELECT
SELECT product,
product,Sum(price
Sum(price**quantity)
quantity)
FROM
FROM Purchase
Purchase
WHERE
WHERE date
date>>‘10/1/2020’
‘10/1/2020’
GROUP
GROUPBY
BYproduct
product
HAVING
HAVING Sum(quantity)
Sum(quantity)>>3030
Evaluation steps:
1. Evaluate FROM-WHERE, apply condition C1
2. Group by the attributes a1,…,ak
3. Apply condition C2 to each group (may have aggregates)
4. Compute aggregates in S and return the result
LALA RUKH AHSAN 23
INTERSECT and EXCEPT: not in SQL Server
1. INTERSECT AND
EXCEPT: If R, S have no
duplicates, then can
write without
subqueries
(SELECT
(SELECTR.A,
R.A,R.B
R.B SELECT
SELECTR.A,
R.A,R.B
R.B (HOW ?)
FROM
FROM R) R) FROM
FROM RR
INTERSECT
INTERSECT WHERE
WHERE
(SELECT
(SELECTS.A,
S.A,S.B
S.B EXISTS(SELECT
EXISTS(SELECT**
FROM
FROM S) S) FROM
FROMSS
WHERE
WHERER.A=S.A
R.A=S.Aand
andR.B=S.B)
R.B=S.B)
(SELECT
(SELECTR.A,
R.A,R.B
R.B SELECT
SELECTR.A,
R.A,R.B
R.B
FROM
FROM R)R) FROM
FROM RR
EXCEPT
EXCEPT WHERE
WHERE
(SELECT
(SELECTS.A,
S.A,S.B
S.B NOT
NOT EXISTS(SELECT
EXISTS(SELECT**
FROM
FROM S)S) FROM
FROMSS
WHERE
WHERER.A=S.A
R.A=S.Aand
andR.B=S.B)
R.B=S.B)
LALA RUKH AHSAN 24
Nested Queries
A sub query is a query nested within another query
The enclosing query also called outer query
Nested query is called inner query
There can be multiple levels of nesting
Example:
Select movie_title
From movies
Where director_id IN (
Select person_id
From People
Where person_state = ‘TX’)
LALA RUKH AHSAN 25
Nested Queries - Types
Non-Correlated Sub Queries:
Requires data required by outer query before it can be executed
Inner query does not contain any reference to outer query
Behaves like a function
Example:
People(person_fname, person_lname, person_id, person_state, person_city)
Movies(movie_id, movie_title, director_id, studio_id)
Select movie_title, studio_id
From Movies
Where director_id IN (
Select person_id
From People
Where person_state = ‘TX’)
Steps:
1. Subquery is executed
2. Subquery results are plugged into the outer query
3. The outer query is processed
LALA RUKH AHSAN 26
Nested Queries - Types
Correlated Sub Queries:
Contains reference to the outer query
Behaves like a loop
Example:
People(person_fname, person_lname, person_id, person_state, person_city)
Cast_Movies(cast_member_id, role, movie_id)
Select person_fname, person_lname
From People p1
Where ‘Pam Green’ in (
Select role
From Cast_Movies
Where p1.person_id = cast_member_id
)
Steps:
Contents of the table row in outer query are read
Sub-query is executed using data in the row being processed.
Results of the inner query are passed to the where in the outer query
The Outer query is Processed