Difference between revisions of "Introduction to Databases with Stanford University : Relational Algebra Exercises"

From Ittichai Chammavanijakul's Wiki
Jump to navigation Jump to search
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
 
* Introduction to Databases by Standford University http://db-class.org
 
* Introduction to Databases by Standford University http://db-class.org
 
* Additional materials: http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToDatabases
 
* Additional materials: http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToDatabases
 +
* Database data [[Pizza_data]]
  
 
1. Find all pizzas eaten by at least one female over the age of 20.
 
1. Find all pizzas eaten by at least one female over the age of 20.

Latest revision as of 18:28, 16 November 2011

1. Find all pizzas eaten by at least one female over the age of 20.

\project_{pizza} ( 
 \select_{gender='female' and age > 20} Person 
  \join Eats) 

2. Find the names of all females who eat at least one pizza served by Straw Hat. (Note: The pizza need not be eaten at Straw Hat.)

\project_{name} ( 
  \select_{gender='female'} ( 
      ( \select_{pizzeria='Straw Hat'} Serves 
        \join Eats 
       ) \join Person 
   )
)

3. Find all pizzerias that serve at least one pizza for less than $10 that either Amy or Fay (or both) eat.

\project_{pizzeria} ( 
   \select_{name='Amy' or name='Fay'} ( 
      \select_{price < 10} Serves 
      \join Eats 
   ) 
)

4. Find all pizzerias that serve at least one pizza for less than $10 that both Amy and Fay eat.

\project_{pizzeria} ( 
  \project_{pizzeria,pizza,price} ( 
     \select_{name='Fay'} ( 
        \select_{price < 10} Serves 
        \join Eats 
      )
  ) \join 
    \project_{pizzeria,pizza,price} ( 
        \select_{name='Amy'} ( 
           \select_{price < 10} Serves 
           \join Eats 
        )
     ) 
)

5. Find the names of all people who eat at least one pizza served by Dominos but who do not frequent Dominos.

\project_{name} ( 
    \select_{pizzeria='Dominos'} Serves \
    \join Eats 
) 
\diff 
\project_{name} ( 
    \select_{pizzeria = 'Dominos'} Frequents 
)

6. Find all pizzas that are eaten only by people younger than 24, or that cost less than $10 everywhere they're served.

( 
\project_{pizza} ( 
   \select_{age < 24} (Person \join Eats) 
) 
\diff 
\project_{pizza} ( 
   \select_{age >= 24} (Person \join Eats) 
) 
) 
\union 
( 
\project_{pizza} ( 
   \select_{price < 10} Serves 
) 
\diff 
\project_{pizza} ( 
   \select_{price >= 10} Serves 
) 
)

7. Find the age of the oldest person (or people) who eat mushroom pizza.

\project_{age} (( 
    \select_{pizza = 'mushroom'} Eats 
    ) \join Person 
    ) 
\diff 
\project_{age1} ( 
\select_{age2 > age1} ( 
\rename_{age1} ( 
\project_{age} (( 
    \select_{pizza = 'mushroom'} Eats 
    ) \join Person 
    ) 
    ) 
\cross 
\rename_{age2} ( 
\project_{age} (( 
    \select_{pizza = 'mushroom'} Eats 
    ) \join Person 
    ) 
    ) 
))

8. Find all pizzerias that serve only pizzas eaten by people over 30.

\project_{pizzeria} ( 
    Serves 
) 
\diff 
\project_{pizzeria} ( 
( 
   \project_{pizza} ( 
       Serves 
   ) 
\diff 
\project_{pizza} ( 
   \select_{age > 30} Person 
   \join Eats 
   )) \join Serves 
)

9. Find all pizzerias that serve every pizza eaten by people over 30.

\project_{pizzeria} ( 
    Serves 
) 
\diff 
\project_{pizzeria} ( 
\project_{pizzeria,pizza} (( 
   \select_{age > 30} Person 
   \join Eats 
) \cross Serves 
) 
\diff 
\project_{pizzeria,pizza} ( 
   Serves 
) 
)