CS 186, Spring 2007, Lecture 7 R&G, Chapter 5 Mary Roth: The Important Thing Is Not To Stop Questioning
CS 186, Spring 2007, Lecture 7 R&G, Chapter 5 Mary Roth: The Important Thing Is Not To Stop Questioning
The important thing is not to
stop questioning.
Albert Einstein
Life is just a bowl of queries.
-Anon
(not Forrest Gump)
Administrivia
• Coming up:
– Homework 2 handed out Feb 13
– Midterm 1: in class February 22
• Questions?
Review
Theory Practice
Query Optimization
Relational Calculus Lecture 6 and Execution
Relational Operators
Buffer Management
Lectures 3 &4
Relational Model
Disk Space Management
Lecture 2
DB
Where are we going next?
Query Optimization
After the and Execution
midterm
Relational Operators
DB
Review: Relational Calculus Example
Find names, ages and reservation dates sid sname rating age
of sailors rated > 7 who’ve reserved
S 22 dustin 7 45.0
boat #103 S 31 lubber 8 55.5
S 58 rusty 10 35.0
3 quantifiers, but only 1 is free.
The free quantifier defines the shape of the
result. sid bid day
R 22 101 10/10/96
R 58 103 11/12/96
{S1 | SSailors S.rating > 7
R(RReserves R.bid = 103
R.sid = S.sid) sname age day
• Column Constraints:
expressions for column constraint must produce boolean results
and reference the related column’s value only.
• Table Constraints:
UNIQUE ( column_name [, ... ] )
PRIMARY KEY ( column_name [, ... ] ) |
CHECK ( expression ) |
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable
[ ON DELETE action ] [ ON UPDATE action ] }
S.name E.cid
result =
Jones History105
Basic SQL Query
DISTINCT: optional keyword indicating target-list : A list of attributes
answer should not contain duplicates. of tables in relation-list
In SQL, default is that duplicates
are not eliminated! (Result is called
a “multiset”)
SELECT [DISTINCT] target-list
FROM relation-list
WHERE qualification
qualification : Comparisons
relation-list : A list of relation
combined using AND, OR and
NOT. Comparisons are Attr op names, possibly with a range-
const or Attr1 op Attr2, where op is variable after each name
one of ,,,, etc.
Query Semantics
• Semantics of an SQL query are defined in terms of the
following conceptual evaluation strategy:
1. FROM clause: compute cross-product of all tables
2. WHERE clause: Check conditions, discard tuples that fail.
(called “selection”).
3. SELECT clause: Delete unwanted fields. (called
“projection”).
4. If DISTINCT specified, eliminate duplicate rows.
SELECT sname
FROM Sailors, Reserves
WHERE Sailors.sid=Reserves.sid AND bid=103
Boats
bid bname color
Sailors
sid sname rating age
1 Frodo 7 22
101
102
103
X
Nina
Pinta
red
blue
Santa Maria red
2 Bilbo 2 39
3 Sam 8 27 Reserves
sid bid day
1 102 9/12
2 103 9/13
Step 1: Compute the cross product
Sailors Reserves
sid sname rating age sid bid day
1 Frodo 7 22 1 102 9/12
2 Bilbo 2 39 2 103 9/13
3 Sam 8 27
SailorsXReserves
...
sid sname rating age sid bid day
1 Frodo 7 22 1 102 9/12
1 Frodo 7 22 2 103 9/13
2 Bilbo 2 39 1 102 9/12
2 Bilbo 2 39 2 103 9/13
3 Sam 8 27 1 103 9/12
3 Sam 8 27 2 103 9/13
Step 1: How big?
Sailors Reserves
sid sname rating age sid bid day
1 Frodo 7 22 1 102 9/12
2 Bilbo 2 39 2 103 9/13
3 Sam 8 27
Question:
If |S| is cardinality of Sailors, and
|R| is cardinality of Reserves,
What is the cardinality of Sailors X Reserves?
SELECT sname
FROM Sailors, Reserves
WHERE Sailors.sid=Reserves.sid AND bid=103
SailorsXReserves
sid sname rating age sid bid day
1 Frodo 7 22 1 102 9/12
1 Frodo 7 22 2 103 9/13
2 Bilbo 2 39 1 102 9/12
2 Bilbo 2 39 2 103 9/13
3 Sam 8 27 1 102 9/12
3 Sam 8 27 2 103 9/13
Step 3: Delete unwanted fields
SELECT sname
FROM Sailors, Reserves
WHERE Sailors.sid=Reserves.sid AND bid=103
SailorsXReserves
sid sname rating age sid bid day
1 Frodo 7 22 1 102 9/12
1 Frodo 7 22 2 103 9/13
2 Bilbo 2 39 1 102 9/12
2 Bilbo 2 39 2 103 9/13
3 Sam 8 27 1 102 9/12
3 Sam 8 27 2 103 9/13
Range Variables
•Used for short hand
•Needed when ambiguity could arise
e.g two tables with the same column name:
SELECT sname
FROM Sailors, Reserves
WHERE Sailors.sid=Reserves.sid AND Reserves.bid=103
SELECT sname
FROM Sailors S, Reserves R
WHERE S.sid=R.sid AND R.bid=103
`_’ stands for any one character and `%’ stands for 0 or more
arbitrary characters.
SELECT DISTINCT
Sailors Reserves
sid sname rating age sid bid day
1 Frodo 7 22 1 102 9/12
2 Bilbo 2 39 2 103 9/12
3 Sam 8 27 2 102 9/13
sid
1
2
2
Sailors
SELECT DISTINCT
sid sname rating age
How about: 1 Frodo 7 22
sname
2 Bilbo 2 39
SELECT S.sname Frodo
3 Sam 8 27
FROM Sailors S, Bilbo
Bilbo 4 Bilbo 5 32
Reserves R
WHERE S.sid=R.sid
Reserves
sid bid day
vs:
1 102 9/12
SELECT DISTINCT 2 103 9/13
S.sname 4 105 9/13
FROM Sailors S, sname
Reserves R Frodo Do we find all sailors
WHERE S.sid=R.sid that reserved at least
Bilbo one boat?
ANDs, ORs, UNIONs and INTERSECTs
X
WHERE(B.color=‘red’ AND
B.color=‘green’)
AND R.bid=B.bid
101
102
103
Nina
Pinta
Santa Maria
red
blue
red
105 Titanic green
Sailors
Reserves
sid sname rating age
sid bid day
1 Frodo 7 22
1 101 9/12
2 Bilbo 2 39
2 103 9/13
3 Sam 8 27
1 105 9/13
Use INTERSECT instead of
AND
Exercise: try to rewrite this
SELECT R.sid query using a self join instead
of INTERSECT!
FROM Boats B,Reserves R
WHERE B.color = ‘red’
AND R.bid=B.bid Boats
bid bname color
INTERSECT 101 Nina red
102 Pinta blue
SELECT R.sid 103 Santa Maria red
FROM Boats B,Reserves R 105 Titanic green
WHERE B.color = ‘green’
AND R.bid=B.bid Reserves
sid bid day
sid
sid sid 1 101 9/12
1
1 = 1 2 103 9/13
2
1 105 9/13
Could also use UNION for
the OR query
SELECT R.sid
FROM Boats B, Reserves R
WHERE B.color = ‘red’
AND R.bid=B.bid Boats
bid bname color
UNION 101 Nina red
102 Pinta blue
SELECT R.sid 103 Santa Maria red
FROM Boats B, Reserves R 105 Titanic green
WHERE B.color = ‘green’
AND R.bid=B.bid Reserves
sid sid bid day
sid sid 2 1 102 9/12
2
4 = 4 2 103 9/13
4 105 9/13
EXCEPT: Set Difference Sailors
Find sids of sailors who have not sid sname rating age
reserved a boat 1 Frodo 7 22
2 Bilbo 2 39
SELECT S.sid
3 Sam 8 27
FROM Sailors S
EXCEPT Reserves
SELECT S.sid sid bid day
FROM Sailors S, 1 102 9/12
Reserves R 2 103 9/13
WHERE S.sid=R.sid
1 105 9/13