CSE 344: Section 4
(Un)Nesting Queries
1
Azure Setup Demo
HW3 Setup Demo
@2:28:
You must set “Allow services and resources to access this server” to YES (not mentioned in video. See step L in the doc)
Why Subqueries?
4
Subqueries vs. Group By
5
Nested Queries
6
Subquery in SELECT
SELECT DISTINCT C.cname, (SELECT count(*)
FROM Product P
WHERE P.cid=C.cid)
FROM Company C
7
Subquery in SELECT
Unnest using JOIN and GROUP BY
SELECT C.cname, count(P.cid)
FROM Company C LEFT OUTER JOIN
Product P ON C.cid = P.cid
GROUP BY C.cname;
8
Subquery in FROM
SELECT X.pname � FROM (SELECT * FROM Product
WHERE price > 20) AS X
WHERE X.price < 500
More readable:
WITH X AS (SELECT * FROM Product
WHERE price > 20)
SELECT X.pname � FROM X
WHERE X.price < 500
9
Subquery in FROM
Unnest using WHERE
SELECT X.pname � FROM Product AS X
WHERE X.price < 500 AND X.price > 20;
10
Subquery in WHERE
SELECT DISTINCT C.cname
FROM Company C
WHERE EXISTS (SELECT *� FROM Product P� WHERE C.cid = P.cid AND P.price < 200)
11
Subquery in WHERE
SELECT DISTINCT C.cname
FROM Company C, Product P
WHERE C.cid = P.cid AND P.price < 200
12
Subquery in WHERE Syntax
13
Difference Operator in RA
SELECT DISTINCT R.a
FROM Table_R AS R
WHERE NOT EXISTS (
SELECT *
FROM Table_S AS S
WHERE S.b = R.a
AND S.c < 15
);
14
Difference Operator
SELECT DISTINCT R.a
FROM Table_R AS R
WHERE NOT EXISTS (
SELECT *
FROM Table_S AS S
WHERE S.b = R.a
AND S.c < 15);
15
πR2.a
Difference Operator
SELECT DISTINCT R.a
FROM Table_R AS R
WHERE NOT EXISTS (
SELECT *
FROM Table_S AS S
WHERE S.b = R.a
AND S.c < 15);
Equivalent SQL:
SELECT DISTINCT R2.a FROM Table_R R2
EXCEPT
SELECT R1.a FROM Table_R R1, Table_S S
WHERE S.c < 15 AND R1.a = S.b;
16
πR2.a
To Nest or Not to Nest
17
Correlated vs. Uncorrelated Subquery
18
Correlated vs. Uncorrelated Subquery
19
Monotonicity
20
Monotonicity
Definition: A query Q is monotone if whenever we add tuples to one or more input tables, the answer to the query will not lose any output tuples
Theorem: If Q is a SELECT-FROM-WHERE query that does not have subqueries or aggregates, then it is monotone
Theorem: If a nested query is monotonic, then it can actually be unnested.
21
(Non-)monotonic Queries
SELECT COUNT(*)
FROM T1
GROUP BY T1.attr
No! This query does not satisfy set containment.
Ex:
Current data: {(6), (23)}; Output: {(2)}
After more data: {(6), (23), (1)}; Output: {(3)}
{(2)} ⊄ {(3)}
22
Aggregates are generally sensitive to new tuples
Worksheet