#  Relational Calculus Logic, like whiskey, loses its beneficial

Relational Calculus

Logic, like whiskey, loses its beneficial
effect when taken in too large quantities.
--Lord Dunsany
Relational Calculus
• Query has the form: {T | p(T)}
– p(T) is a formula containing T
• Answer = tuples T for which p(T) = true.
Formulae
• Atomic formulae:
T  Relation
T.a op T.b
T.a op constant
… op is one of ,, ,,, 
• A formula can be:
–
–
–

–
an atomic formula
p, pq, pq,pq
R( p(R))
R( p(R))
Free and Bound Variables
• Quantifiers:  and 
• Use of  X or  X binds X.
– A variable that is not bound is free.
• Recall our definition of a query:
– {T | p(T)}
•
Important restriction:
—
T must be the only free variable in p(T).
—
all other variables must be bound using a quantifier.
Simple Queries
• Find all sailors with rating above 7
{S |S Sailors  S.rating &gt; 7}
• Find names and ages of sailors with rating above 7.
{S | S1 Sailors(S1.rating &gt; 7
 S.sname = S1.sname
 S.age = S1.age)}
– Note: S is a variable of 2 fields (i.e. S is a projection of
Sailors)
Joins
Find sailors rated &gt; 7 who’ve reserved boat
#103
{ S | SSailors  S.rating &gt; 7 
R(RReserves  R.sid = S.sid
 R.bid = 103) }
Joins (continued)
Find sailors rated &gt; 7 who’ve reserved a red boat
{ S | SSailors  S.rating &gt; 7 
R(RReserves  R.sid = S.sid
 B(BBoats  B.bid = R.bid
 B.color = ‘red’)) }
• This may look cumbersome, but it’s not so different
from SQL!
Universal Quantification
Find sailors who’ve reserved all boats
{ S | SSailors 
BBoats (RReserves
(S.sid = R.sid
 B.bid = R.bid)) }
A trickier example…
Find sailors who’ve reserved all Red boats in existence…
{ S | SSailors 
B  Boats ( B.color = ‘red’ 
R(RReserves  S.sid = R.sid
 B.bid = R.bid)) }
Alternatively…
{ S | SSailors 
B  Boats ( B.color  ‘red’ 
R(RReserves  S.sid = R.sid
 B.bid = R.bid)) }
a  b is the same as a  b
b
T
a
F
T
T
F
F
T
T
A Remark: Unsafe Queries
•  syntactically correct calculus queries that have
an infinite number of answers! Unsafe queries.
– e.g.,  S |   S  Sailors 







– Solution???? Don’t do that!
•
Schema:
Movie(title, year, studioName)
ActsIn(movieTitle, starName)
Star(name, gender, birthdate, salary)
•
Queries to write in Relational Calculus:
1. Find all movies by Paramount studio
2. … movies whose stars are all women
3. … movies starring Kevin Bacon
4. Find stars who have been in a film w/Kevin Bacon
5. Stars within six degrees of Kevin Bacon*
6. Stars connected to K. Bacon via any number of films**
* Try two degrees for starters
** Good luck with this one!
1. Find all movies by Paramount studio
{M | MMovie 
M.studioName = ‘Paramount’}
2. Movies whose stars are all women
{M | MMovie 
AActsIn((A.movieTitle = M.title) 
SStar(S.name = A.starName 
S.gender = ‘F’))}
3. Movies starring Kevin Bacon
{M | MMovie 
AActsIn(A.movieTitle = M.title 
A.starName = ‘Bacon’))}
4. Stars who have been in a film w/Kevin Bacon
{S | SStar 
AActsIn(A.starName = S.name 
A2ActsIn(A2.movieTitle = A.movieTitle 
A2.starName = ‘Bacon’))}
S:
name
…
A:
A2:
movie
movie
star
star
‘Bacon’
two
5. Stars within six degrees of Kevin Bacon
{S | SStar 
AActsIn(A.starName = S.name 
A2ActsIn(A2.movieTitle = A.movieTitle 
A3ActsIn(A3.starName = A2.starName 
A4ActsIn(A4.movieTitle = A3.movieTitle 
A4.starName = ‘Bacon’))}
Two degrees:
S:
name
…
A:
movie
star
A2:
movie
star
A3:
movie
star
A4:
movie
star
‘Bacon’
6. Stars connected to K. Bacon via any number
of films
• Sorry … that was a trick question
– Not expressible in relational calculus!!
• What about in relational algebra?
– We will be able to answer this question shortly …
Expressive Power
• Expressive Power (Theorem due to Codd):
– Every query that can be expressed in relational algebra
can be expressed as a safe query in relational calculus;
the converse is also true.
• Relational Completeness:
Query language (e.g., SQL) can express every query that
is expressible in relational algebra/calculus.
(actually, SQL is more powerful, as we will see…)
Question:
• Can we express query #6 in relational algebra?
• A: If we could, then by Codd’s theorem we
could also express it in relational calculus.
However, we know the latter is not possible,
Summary
• Formal query languages — simple and powerful.
– Relational algebra is operational
• used as internal representation for query evaluation
plans.
– Relational calculus is “declarative”
• query = “what you want”, not “how to compute it”
– Same expressive power
--&gt; relational completeness.
• Several ways of expressing a given query
– a query optimizer should choose the most efficient version.