Query 1.) Theaters showing movies directed by T. ------------------------------------------------ SQL version: SELECT s.theater FROM Schedule s, Movie m WHERE s.mtitle = m.title AND m.director='Tarantino' Algebra version: proj_{theater}(Schedule join_{mtitle=title} (select_{dir='Tarantino'}(Movie))) Query 2.) Theaters not showing any movies directed by T. -------------------------------------------------------- SQL version with "not exists": SELECT s1.theater FROM Schedule s1 WHERE not exists (SELECT * FROM Schedule s2, Movie m WHERE s2.theater=s1.theater AND s2.mtitle = m.title AND m.director='Tarantino') SQL version with "not in": SELECT s1.theater FROM Schedule s1 WHERE s1.theater not in (SELECT s2.theater FROM Schedule s2, Movie m WHERE s2.mtitle = m.title AND m.director='Tarantino') SQL version with "MINUS": (SELECT s.theater FROM Schedule s) MINUS (SELECT s.theater FROM Schedule s, Movie m WHERE s.mtitle = m.title AND m.director='Tarantino') Algebra version: proj_{theater}(Schedule) \ proj_{theater}(Schedule join_{mtitle=title} (select_{dir='Tarantino'}(Movie))) Query 3.) Theaters showing only movies directed by T. ----------------------------------------------------- SQL version with "not exists": SELECT s.theater FROM Schedule s WHERE not exists (SELECT * FROM Schedule s1 WHERE s1.theater = s.theater AND not exists (SELECT * FROM Movie m WHERE s1.mtitle = m.title AND m.director = 'Tarantino')) SQL version with "not in": SELECT s.theater FROM Schedule s WHERE s.theater not in (SELECT s1.theater FROM Schedule s1 WHERE s1.mtitle not in (SELECT m.title FROM Movie m WHERE m.director = 'Tarantino')) Algebra version: proj_{theater}(Schedule) \ proj_{theater}(Schedule \ (proj_{theater}(Schedule) X proj_{title}(select_{dir='T'}(Movie)))) Query 4.) Theaters showing all movies directed by T. ---------------------------------------------------- Bad theaters: Not showing some movie directed by T., i.e., where some T. movie is not on schedule. SELECT s.theater FROM Schedule s WHERE not exists (SELECT * FROM Movie m WHERE m.director = 'Tarantino' and not exists (SELECT * FROM Schedule s0 WHERE s0.theater = s.theater and s0.mtitle = m.title)) Algebra version: proj_{theater}(Schedule) \ proj_{theater}((proj_{theater}(Schedule) X proj_{title}(select_{dir='T'}(Movie))) \ Schedule)