Lectures3A.relational Algebra Exercises
Lectures3A.relational Algebra Exercises
Appendix to Lecture 3
Running example: Movies database
Movie ( title, year, length, inColor, studioName, producerC)
MovieStar (name, address, gender, birthdate)
StarsIn (movieTitle, movieYear, starName)
MovieExec (name, address, cert, netWorth)
Studio (studioname, presc);
Movies
SIMPLE QUERIES
Selections: Movies
1. Find titles of all black-and-white movies which were
produced after 1970
10. Find the names of all producers who did NOT produce ‘Star wars’
Simple:
πname(MovieExec) –
πname((Movie)⋈title=‘Star wars’ AND producerC=cert(MovieExec))
Star Prod
star addr prod addr
1
A 1 A 1 Star=ρname→star(MovieStar)
B 1 B 1 Prod=ρname→prod(MovieExec)
C 2 D 2
F 3 E 3
Star Addr Prod Addr 2. Cartesian
A 1 A 1
A 1 B 1 product:
A
A
1
1
D
E
2
3
Star x Prod
B 1 A 1
B 1 B 1 2. Pairs = πstar,prod
((Star)
B 1 D 2
⋈Star.address=Prod.address AND star!=prod
B 1 E 3 (Prod))
C 2 A 1
C 2 B 1 Pairs
C 2 D 2 Star Prod
C 2 E 3 A B
F 3 A 1 B A
F 3 B 1 C D
F 3 D 2 F E
F 3 E 3
3. Sorted pairs
Pairs
Star Prod 3. PA = σstar<prod(Pairs) // Pairs in Ascending
PD = σstar>prod(Pairs) //Pairs in Descending
A B
B A
C D
F E
PA PD
Star Prod Star Prod
A B B A
C D F E
4. Cartesian product PA x PD
Palyndrome (only colored tuple qualify)
PA PD PA.Star PA.Prod PD.Star PD.Prod
Star Prod Star Prod A B B A
x
A B B A A B F E
C D F E C D B A
C D F E
4. Palindrome = (PA)
⋈PA.star=PD.prod AND PA.prod=PD.star
(PD)
5. Remove palindrome tuples from
pairs
5. Pairs – πPD.star,PD.prod (Palindrome)
Pairs
Star Prod
Palyndrome
A B PA.Star PA.Prod PD.Star PD.Prod
B A - A B B A
C D
F E result
Star Prod
A B
C D
F E
Movie ( title, year, length, inColor, studioName, producerC)
MovieStar (name, address, gender, birthdate)
StarsIn (movieTitle, movieYear, starName)
MovieExec (name, address, cert, netWorth)
Studio (studioname, presc);
πname[(σstudioName=‘Disney’(Movie))⋈producerC=cert(MovieExec)]
∧
πname[(σstudioName=‘MGM’(Movie))⋈producerC=cert(MovieExec)]
Movie ( title, year, length, inColor, studioName, producerC)
MovieStar (name, address, gender, birthdate)
StarsIn (movieTitle, movieYear, starName)
MovieExec (name, address, cert, netWorth)
Studio (studioname, presc);
12. Find all movie titles for which there is no producer entry
in MovieExec table
πtitle(Movie) – πtitle ((Movie)⋈producerC=cert(MovieExec))
Movie ( title, year, length, inColor, studioName, producerC)
MovieStar (name, address, gender, birthdate)
StarsIn (movieTitle, movieYear, starName)
MovieExec (name, address, cert, netWorth)
Studio (studioname, presc);
πname(
σgender='female' AND (pizza='mushroom' OR pizza='pepperoni')(Person⋈Eats)
)
Person ( name, age, gender )
Frequents ( name, pizzeria )
Eats ( name, pizza )
Serves ( pizzeria, pizza, price )
Explanation
πname(Person) on the next
page
−
πname(Frequents − πname,pizzeria(Eats⋈Serves))
17. Find the names of all people who frequent only
pizzerias serving at least one pizza they eat.
−
πname(πname,pizzeria(Eats⋈Serves)−Frequents)
18. Find the names of all people who frequent every pizzeria
serving at least one pizza they eat.
1. List of all pizzerias per person which serve at least one pizza
this person can eat:
πname,pizzeria(Eats⋈Serves)
1. Finds all pizzerias where price for pepperoni pizza is greater than in
some other pizzeria
σprice>price2(
πpizzeria,price(σpizza='pepperoni'Serves)
×
ρpizzeria2,price2[πpizzeria,price(σpizza='pepperoni'Serves)]
)
πpizzeria(σpizza='pepperoni'Serves)
−
π pizzeria [σprice>price2(
πpizzeria,price(σpizza='pepperoni'Serves)
×
ρpizzeria2,price2πpizzeria,price(σpizza='pepperoni'Serves))]