Advanced SQL Queries - PowerPoint PPT Presentation

About This Presentation
Title:

Advanced SQL Queries

Description:

FROM Boats B, Reserves R. WHERE R.sid = S.sid and R.bid = B.bid and B.color = green' ... which there does not exist a boat B in Boats that he did not reserve ... – PowerPoint PPT presentation

Number of Views:324
Avg rating:3.0/5.0
Slides: 48
Provided by: csHu
Category:
Tags: sql | advanced | boats | queries

less

Transcript and Presenter's Notes

Title: Advanced SQL Queries


1
Advanced SQL Queries
2
Example Tables Used
Boats Boats Boats
bid bname color
101 103 Nancy Gloria red green
Sailors Sailors Sailors Sailors
sid sname rating age
22 31 58 Dustin Lubber Rusty 7 8 10 45.0 55.5 35.0
Reserves Reserves Reserves
sid bid day
22 58 101 103 10/10/04 11/12/04
3
Rewriting Minus Queries
Name and id of sailors that has reserved at least
one red boat and has never reserved green boat
SELECT S.sname, S.sid FROM Sailors S, Boats B,
Reserves R WHERE S.sid R.sid and R.bid B.bid
and B.color red MINUS
SELECT S.sname, S.sid FROM Sailors S, Boats B,
Reserves R WHERE S.sid R.sid and R.bid B.bid
and B.color green
4
Rewriting Minus Queries Using Not In
SELECT S.sname, S.sid FROM Sailors S, Boats B,
Reserves R WHERE S.sid R.sid and R.bid
B.bid and B.color red
and S.sid NOT IN ( SELECT R.sid FROM Boats B,
Reserves R WHERE R.bid B.bid and B.color
green)
5
Rewriting Minus Queries Using Not Exists
SELECT S.sname, S.sid FROM Sailors S, Boats B,
Reserves R WHERE S.sid R.sid and R.bid B.bid
and B.color red and NOT
EXISTS ( SELECT FROM Boats B, Reserves R WHERE
R.sid S.sid and R.bid B.bid and B.color
green)
6
Division
  • Consider A(X,Y) and B(Y).
  • Then A?B
  • In general, we require that the set of fields in
    B be contained in those of A.

7
Suppliers from A who supply All Parts from B (1)
sno pno
S1 S1 S1 S1 S2 S2 S3 S4 S4 P1 P2 P3 P4 P1 P2 P2 P2 P4
?

A
8
Suppliers from A who supply All Parts from B (1)
sno pno
S1 S1 S1 S1 S2 S2 S3 S4 S4 P1 P2 P3 P4 P1 P2 P2 P2 P4
S1 S2 S3 S4
?

A
9
Suppliers from A who supply All Parts from B (2)
sno pno
S1 S1 S1 S1 S2 S2 S3 S4 S4 P1 P2 P3 P4 P1 P2 P2 P2 P4
?

A
10
Suppliers from A who supply All Parts from B (2)
sno pno
S1 S1 S1 S1 S2 S2 S3 S4 S4 P1 P2 P3 P4 P1 P2 P2 P2 P4
S1 S4
?

A
11
Suppliers from A who supply All Parts from B (3)
sno pno
S1 S1 S1 S1 S2 S2 S3 S4 S4 P1 P2 P3 P4 P1 P2 P2 P2 P4
?

A
12
Suppliers from A who supply All Parts from B (3)
sno pno
S1 S1 S1 S1 S2 S2 S3 S4 S4 P1 P2 P3 P4 P1 P2 P2 P2 P4
S1
?

A
13
Sailors who Reserved all Boats
(?sid,bid Reserves) ?(?bid Boats)
Sailor S whose "set of boats reserved" contains
the "set of all boats"
14
Division in SQL (1)
Sailor S for which there does not exist a boat B
in Boats that he did not reserve
SELECT sid FROM Sailors S WHERE NOT
EXISTS (SELECT B.bid FROM Boats B WHERE
B.bid NOT IN (SELECT R.bid FROM Reserves
R WHERE R.sid S.sid))
15
Division in SQL (2)
Sailor S for which there does not exist a boat B
in Boats that he did not reserve
SELECT S.sid FROM Sailors S WHERE NOT
EXISTS( SELECT B.bid FROM Boats B WHERE
NOT EXISTS( SELECT R.bid FROM Reserves
R WHERE R.bidB.bid and
R.sidS.sid))
16
Division in SQL (3)
Sailor S for which there does not exist a boat B
in Boats for which there is no reservation in
Reserves
SELECT S.sid FROM Sailors S WHERE NOT
EXISTS((SELECT B.bid FROM Boats B)
MINUS (SELECT R.bid FROM Reserves
R WHERE R.sid S.sid))
17
Aggregation
18
Aggregate Operators
  • The aggregate operators available in SQL are
  • COUNT()
  • COUNT(DISTINCT A)
  • SUM(DISTINCT A)
  • AVG(DISTINCT A)
  • MAX(A)
  • MIN(A)
  • NULL values are ignored

19
Some Examples
SELECT COUNT() FROM Sailors S
SELECT COUNT(sid) FROM Sailors S
?
SELECT AVG(S.age) FROM Sailors S WHERE
S.rating10
SELECT COUNT(distinct color) FROM Boats
20
Find Average Age for each Rating
  • So far, aggregation has been applied to all
    tuples that passed the WHERE clause test.
  • How can we apply aggregation to groups of tuples?

21
Basic SQL Query
SELECT Distinct target-list FROM
relation-list WHERE condition GROUP BY
grouping-list HAVING group-condition
  • target-list Fields appearing in grouping-list
    and aggregation operators
  • group-condition Can only constrain attributes
    appearing in grouping-list and aggregation
    operators

22
Evaluation
  1. Compute cross product of relations in FROM
  2. Tuples failing WHERE are thrown away
  3. Tuples are partitioned into groups by values of
    grouping-list attributes
  4. The group-condition is applied to eliminate
    groups
  5. One answer in generated for each group

23
Find Average Age for each Rating
SELECT AVG(age) FROM Sailors GROUP BY rating
24
Sailors Sailors Sailors Sailors
sid sname rating age
22 31 58 63 78 84 Dustin Lubber Rusty Fluffy Morley Popeye 7 8 10 7 7 10 45.0 55.5 35.0 44.0 31.0 33.0
Sailors Sailors Sailors Sailors
sid sname rating age
22 63 78 31 58 84 Dustin Fluffy Morley Lubber Rusty Popeye 7 7 7 8 10 10 45.0 44.0 31.0 55.5 35.0 33.0
40
55.5
34
25
Find name and age of oldest Sailor
Wrong!
SELECT S.sname, MAX(S.age) FROM Sailors S
SELECT S.sname, MAX(S.age) FROM Sailors S GROUP
BY S.sname
Wrong we dont obtain what we want
26
Find name and age of oldest Sailor
SELECT S.sname, S.age FROM Sailors S WHERE
S.age (SELECT MAX(S2.age) FROM
Sailors S2)
Right!! How else can this be done? Hint gt ALL
SELECT S.sname, S.age FROM Sailors S WHERE
S.age gt ALL (SELECT S2.age FROM
Sailors S2)
27
What does this return?
SELECT B.bid, COUNT() FROM Boats B,
Reserves R WHERE R.bidB.bid and
B.colorred GROUP BY B.bid
Tuples (id of reserved red boat, number of
reservations of the red boat)
What would happen if we put the condition about
the color in the HAVING clause?
28
What would happen if we put the condition about
the color in the HAVING clause?
We have also to put the color in the grouping
list!
SELECT B.bid, COUNT() FROM Boats B,
Reserves R WHERE R.bidB.bid GROUP BY B.bid,
B.color HAVING B.colorred
29
Names of Boats that were not Reserved on more
than 5 days
SELECT bname FROM Boats B, Reserves R
WHERE R.bidB.bid GROUP BY bid, bname
HAVING count(DISTINCT day) lt 5
Aggregate functions are not allowed in WHERE
30
The Color for which there are the most boats
SELECT color FROM Boats B GROUP BY color
HAVING max(count(bid))
31
The Color for which there are the most boats
SELECT color FROM Boats B GROUP BY color
HAVING count(bid) gt ALL (SELECT
count(bid) FROM Boats GROUP BY Color)
32
Aggregation Instead of Exists
  • Aggregation can take the place of exists.
  • Example

SELECT color FROM Boats B1 WHERE NOT
EXISTS( SELECT FROM Boats B2
WHERE B1.bid ltgt B2.bid AND
B1.colorB2.color)
The color of the boat that there is no other boat
of this color
33
Aggregation Instead of Exists
SELECT color FROM Boats B1 GROUP BY color
HAVING count(bid) 1
34
Sub-queries and Views
35
A Complex Query
  • We would like to create a table containing 3
    columns
  • Sailor id
  • Sailor age
  • Age of the oldest Sailor

36
Attempt 1
SELECT S.sid, S.age, MAX(S.age) FROM Sailors S
37
Attempt 2
SELECT S.sid, S.age, MAX(S.age) FROM
Sailors S GROUP BY S.sid, S.age
38
Solution 1Sub-query in FROM
SELECT S.sid, S.age, M.mxage FROM Sailors
S,(SELECT MAX(S2.age) as mxage FROM Sailors
S2) M
  • We can put a query in the FROM clause instead of
    a table
  • The sub-query in the FROM clause must be renamed
    with a range variable (M in this case).

39
Solution 2Sub-query in SELECT
SELECT S.sid, S.age, (SELECT MAX(S2.age)
FROM Sailors S2) FROM Sailors S
  • A sub-query in the SELECT clause must return at
    most one value for each row returned by the outer
    query.

40
Another Example of a Sub-query in SELECT
SELECT S.sid, S.age, (SELECT MAX(S2.age)
FROM Sailors S2 WHERE S2.ageltS.age)
FROM Sailors S
  • What does this query return? For each sailor S,
    the age of the oldest sailor among the sailors
    younger than S
  • Note the use of S (defined in the outer query) in
    the sub-query.

41
Another Example of a Sub-query in FROM??
SELECT S.sid, S.age, M.mxage FROM Sailors S,
(SELECT MAX(S2.age) as mxage FROM Sailors
S2 WHERE S2.ageltS.age) M
42
Solution 3 Create a Table
CREATE TABLE MaxAge as SELECT MAX(S.age) as
mxage FROM Sailors S
MUST Rename!
SELECT S.sid, S.age, M.mxage FROM Sailors S,
MaxAge M
Problem how to update MaxAge table?
43
Views
  • A view is a "virtual table" defined using a query
  • You can use a view as if it were a table, even
    though it doesn't contain data
  • The view is computed every time that it is
    referenced

44
Advantages and Disadvantages
  • Advantages
  • no memory used for views
  • update of table does not require updating views
  • gives query processor more choices for optimizing
  • Disadvantages
  • must be recomputed every time used
  • if tables that view uses are dropped, view data
    is lost

45
Solution 4 Views
  • A View is a query that looks like a table and can
    be used as a table.

CREATE OR REPLACE VIEW MaxAge as SELECT
MAX(S.age) as mxage FROM Sailors S
MUST Rename!
SELECT S.sid, S.age, M.mxage FROM Sailors S,
MaxAge M
46
Another Example of Views
CREATE OR REPLACE VIEW MaxAges AS SELECT S1.sid,
S2.age AS mxage FROM Sailors S1, Sailors S2 WHERE
S2.age (SELECT MAX(S3.age) FROM Sailors
S3 WHERE S3.age lt S1.age)
SELECT S.sid, S.age, M.mxage FROM Sailors S,
MaxAges M WHERE S.sid M.sid
47
Views For Restricting Access
  • Suppose that we have a table
  • Grades(Login, Exercise, Grade)
  • We would like a user to only be able to see his
    own grades. We create the following view and
    grant privileges to query the view (not the
    underlying table)

CREATE OR REPLACE VIEW UserGrades as SELECT
FROM Grades WHERE Login User
The system defines the user name.
Write a Comment
User Comments (0)
About PowerShow.com