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;