lezione 5_2 [modalità compatibilità]
Transcript
lezione 5_2 [modalità compatibilità]
Dato lo SCHEMA RELAZIONALE: 1- Il nome di tutte le sale di Pisa SELECT s.Nome FROM Sale as s WHERE s.Città = 'Pisa' 2- Il titolo dei film di F. Fellini prodotti dopo il 1960. SELECT f.Titolo FROM Film as f WHERE f.Regista = “Federico Fellini” AND f.AnnoProduzione > 1960 3- Il titolo e la durata dei film di commedia americani o italiani prodotti dopo il 1990 SELECT f.Titolo, f.Durata FROM Film as f WHERE f.Genere=”Commedia” and ((f.Nazionalità=”Americana” or f.Nazionalità=”Italiana”) and f.AnnoProduzione >1990 4- Il titolo dei film di commedia americani prodotti dopo il 1990 oppure italiani SELECT f.Titolo FROM Film as f WHERE f.Genere=”Commedia” and ((f.Nazionalità=” Americana” and f.Anno>1990) or f.Nazionalità=” Italiana”) 5- I titolo dei film dello stesso regista di “Il piccolo diavolo” SELECT f.Titolo FROM Film as f WHERE f.Regista = (SELECT f1.Regista FROM Film as f1 WHERE f1.Titolo = “Il piccolo diavolo”) CREATE VIEW PD AS SELECT f1.Regista FROM Film as f1 WHERE f1.Titolo = “Il piccolo diavolo” SELECT f.Titolo FROM Film as f, PD WHERE f.Regista = PD.Regista 6- Il titolo ed il genere dei film proiettati il giorno di Natale 2004 SELECT DISTINCT f.Titolo, f.Genere FROM Film as f INNER JOIN Proiezioni as p ON f.CodFilm=p.CodFilm WHERE p.DataProiezione =#12/25/04# 7- Il titolo ed il genere dei film proiettati a Pisa il giorno di Natale 2004 SELECT DISTINCT f.Titolo, f.Genere FROM (Proiezioni AS p INNER JOIN Film AS f ON p.CodFilm = f.CodFilm) INNER JOIN Sale AS s ON p.CodSala = s.CodSala WHERE p.DataProiezione=#12/25/2004# AND s.Città="Pisa"; 8- I nomi delle sale di Pisa in cui il giorno di Natale 2004 è stato proiettato un film con M.Mastroianni SELECT DISTINCT s.Nome FROM (Recita AS r INNER JOIN ((Proiezioni AS p INNER JOIN Film AS f ON p.CodFilm = f.CodFilm) INNER JOIN Sale AS s ON p.CodSala = s.CodSala) ON r.CodFilm = f.CodFilm) INNER JOIN Attori AS a ON r.CodAttore = a.CodAttore WHERE p.DataProiezione=#12/25/2004# AND s.Città ="Pisa" AND a.Nome="M.Mastroianni"; SELECT DISTINCT s.Nome FROM Attori a, Recita r, Film f, Proiezioni p, Sale s WHERE p.DataProiezione =#12/25/2004# and s.Città="Pisa" and a.Nome = "M.Mastroianni" And p.CodFilm=f.CodFilm and p.CodSala=s.CodSala and r.CodFilm = f.CodFilm and a.CodAttore = r.CodAttore 9- Il titolo dei film in cui recita M. Mastroianni oppure S.Loren SELECT DISTINCT f.Titolo FROM Film AS f INNER JOIN (ATTORI AS A INNER JOIN Recita AS r ON A.CodAttore = r.CodAttore) ON f.CodFilm = r.CodFilm WHERE A.Nome="M.Mastroianni” OR A.Nome="S.Loren”; 10- Il titolo dei film in cui recitano M. Mastroianni e S.Loren SELECT f.Titolo FROM Film AS f WHERE ((("M.Mastroianni") In (SELECT a.Nome FROM Attori A, Recita R WHERE f.CodFilm = r.CodFilm AND r.CodAttore = a.CodAttore)) AND (("S.Loren") In (SELECT a.Nome FROM Attori A, Recita R WHERE f.CodFilm = r.CodFilm AND r.CodAttore = a.CodAttore))); oppure SELECT f.Titolo FROM FILM as f WHERE (((f.CodFilm) In (SELECT film.CodFilm FROM ATTORI INNER JOIN (FILM INNER JOIN RECITA ON film.CodFilm = Recita.CodFilm) ON Attori.CodAttore = RECITA.CodAttore WHERE (((ATTORI.Nome)='M.Mastroianni')))) AND ((F.CodFilm) In (SELECT FILM.CodFilm FROM ATTORI INNER JOIN (FILM INNER JOIN RECITA ON FILM.CodFilm = RECITA.CodFilm) ON ATTORI.CodAttore = RECITA.CodAttore WHERE (((ATTORI.Nome)='S.Loren'))))); 11- Per ogni film in cui recita un attore americano, il titolo del film e il nome dell’attore SELECT F.Titolo, A.Nome FROM FILM as F INNER JOIN (ATTORI as A INNER JOIN RECITA as R ON A.CodAttore = R.CodAttore) ON F.CodFilm = R.CodFilm WHERE (((A.Nazionalità)="americana")); 12- Per ogni film che è stato proiettato a Pisa nel dicembre2005, il titolo del film e il nome della sala. SELECT DISTINCT f.Titolo, s.Nome FROM (Proiezioni AS p INNER JOIN Film AS f ON p.CodFilm = f.CodFilm) INNER JOIN Sale AS s ON p.CodSala = s.CodSala WHERE (((p.[DataProiezione]) Between #12/1/2005# And #12/31/2005#)); 13- Il numero di sale di Pisa con più di 60 posti SELECT count(*) as sale_grandi FROM Sale s WHERE s.Città = "Pisa" and s.Posti > 60 14- Il numero totale di posti nelle sale di Pisa SELECT Sum(s.Posti) AS somma_di_posti FROM Sale AS s WHERE (((s.Città)="Pisa")); 15- Per ogni città, il numero di sale SELECT s.Città, count(*) as numero_sale FROM Sale s GROUP BY s.Città 16- Per ogni città, il numero di sale con più di 60 posti SELECT s.Città, count(*) as sale_grandi FROM Sale s WHERE s.Posti > 60 GROUP BY s.Città 17- Per ogni regista, il numero di film diretti dopo il 1990 SELECT f.Regista, count(*) as n_film FROM Film f WHERE f.AnnoProduzione > 1990 GROUP BY f.Regista 18- Per ogni regista, l’incasso totale di tutte le proiezioni dei suoi film SELECT f.Regista, sum(p.Incasso) as IncassoTotale FROM Film f, Proiezioni p WHERE f.CodFilm = p.CodFilm GROUP BY f.Regista 19- Per ogni film di Vittorio De Sica, il titolo del film, il numero totale di proiezioni a Pisa e l’incasso totale (sempre a Pisa) SELECT f.Titolo, Count(*) AS NumeroProiezioni, Sum(p.Incasso) AS IncassoTotale FROM (Proiezioni AS p INNER JOIN Film AS f ON p.CodFilm = f.CodFilm) INNER JOIN Sale AS s ON p.CodSala = s.CodSala WHERE (((f.Regista)="Vittorio De Sica") AND ((s.Città)="Pisa")) GROUP BY f.Titolo, f.CodFilm; 20.Per ogni regista e per ogni attore, il numero di film del regista con l’attore SELECT f.Regista, a.Nome, Count(*) AS NumeroFilm FROM Attori AS a, Recita AS r INNER JOIN Film AS f ON r.CodFilm = f.CodFilm WHERE (((a.CodAttore)=[r].[CodAttore])) GROUP BY f.Regista, a.Nome, a.CodAttore; 21 - Il regista ed il titolo dei film in cui recitano meno di 2 attori SELECT f.Regista, f.Titolo FROM Film f, Recita r WHERE f.CodFilm = r.CodFilm GROUP BY f.CodFilm, f.Titolo, f.Regista HAVING count(*) < 2 oppure SELECT f.Regista, f.Titolo FROM Film f WHERE 2 > (SELECT count (*) FROM Recita r WHERE f.CodFilm = r.CodFilm) 22- Per ogni film prodotto dopo il 2005, il codice, il titolo e l’incasso totale di tutte le sue proiezioni SELECT f.CodFilm, f.Titolo, sum (p.Incasso) as IncassoTotale FROM Film as f inner join Proiezioni as p on f.CodFilm = p.CodFilm WHERE f.AnnoProduzione > 2005 GROUP BY f.CodFilm, f.Titolo 23 - Il numero di attori dei film in cui appaiono solo attori nati prima del 1930 SELECT f.Titolo, Count(*) AS NumeroAttori FROM (Recita AS r INNER JOIN Attori AS a ON r.CodAttore = a.CodAttore) INNER JOIN Film AS f ON r.CodFilm = f.CodFilm WHERE (((a.AnnoNascita)<1930)) GROUP BY f.Titolo, f.CodFilm;