Correction du TD SQL (Cinema)

Transcription

Correction du TD SQL (Cinema)
Correction du TD SQL (Cinema)
1)
Quels films a réalisé “Luc Besson” ?
select titre from realise where realisateur = 'Luc Besson';
2)
Quels sont les acteurs de “Quand Harry rencontre Sally” ?
select acteur from joue where titre = 'Quand...';
3)
Ou et à quelle heure peut-on voir le film “ABYSS” ?
select salle, horaire from passe P where P.titre = 'abyss';
4)
Ou peut-on voir un film réalisé par “Ken Loach” ?
select salle from passe P, realise R where P.titre = R.titre and R.realisateur = 'Ken Loach';
5)
Quels acteurs ont produit au moins un film ?
select distinct acteur from joue J, produit P where J.acteur = P.producteur;
6)
Quels acteurs ont produit un film dans lequel ils jouent ?
select distinct acteur, j.titre from joue J, produit P where J.acteur = P.producteur and J.titre = P.titre;
7)
Qui produit les films réalisés par “Woody Allen” ?
select producteur from produit P, realise R where R.titre = P.titre and R.realisateur = 'Woo...';
8)
Qui n’aime aucun film ?
select distinct spectateur from voit where spectateur not in (select amateur from aime);
9)
Quels spectateurs aiment un film qu’ils n’ont pas vu ?
select amateur from aime A where A.titre not in
(select titre from voit V where A.amateur = V.spectateur);
10)
Qui produit un film qui ne passe dans aucune salle ?
select distinct producteur from produit P where P.titre not in (select titre from passe);
11)
Qui ne produit aucun film réalisé par “Disney” ?
select distinct producteur from produit P where P.producteur not in
(select P2.producteur from realise R, produit P2 where
R.titre = P2.Titre and R.realisateur = 'Disney');
12)
Quels producteurs ne voient que les films qu’ils produisent ?
select distinct P1.producteur from produit P1, voit V1 where
P1.producteur = V1.spectateur and P.producteur not in
(select V2.Spectateur from voit V2 where (V2.spectateur, V2.titre) not in
(select P2.producteur, P2.titre from produit P2))
13)
Quels acteurs produisent un film qu’ils ont réalisé ?
select distinct acteur from realise R, joue J, produit P
where P.titre = R.titre and P.producteur = R.realisateur and R.realisateur = J.acteur;
14)
Quels spectateurs voient tous les films ?
select distinct V1.spectateur from voit V1 where not exists
(select * from passe P where not exists
(select * from voit V2 where V2.spectateur=V1.spectateur and V2.titre=P.titre));
(on peut remplacer Passe par Joue ou Produit etc... suivant la semantique de 'tous les films')
15)
Quels producteurs voient tous les films du réalisateur “Reiner” ?
select distinct P.producteur from produit P where not exists
(select * from realise R where realisateur = 'reiner' and not exists
(select * from voit V where V.spectateur = P.producteur and V.titre = R.titre));
16) Combien de films réalise “Luc Besson” ?
select count(*) from realise where realisateur = 'Luc Besson';
17)
Donnez le nombre de personnes qui sont acteur, réalisateur et producteur. Ceci indépendamment du
titre concerné.
select count (distinct J.acteur) from joue J, realise R, produit P
where P.producteur = R.realisateur and J.acteur = P.producteur;
18)
Donnez, par acteur, le nombre de films dans lesquels il joue et qui passent dans les salles. Ces acteurs
ne sont ni réalisateurs, ni producteurs. Le résultat sera trié par acteur.
select J.acteur, count(distinct P.titre) from joue J, passe P
where J.titre = P.titre and J.acteur not in (select producteur from produit)
and J.acteur not in (select realisateur from realise)
group by J.acteur order by J.acteur;
19)
Donnez, par acteur, le nombre de films dans lesquels il joue et qui passent dans plus de 10 salles.
select J.acteur, count(distinct J.titre) from joue J, passe P where J.titre = P.titre
group by J.acteur having count(distinct P.salle) > 10;
20) Donnez le nombre de salles, dont le nom commence par “G” qui passent tous les films du réalisateur
“Reiner” après 18h.
select count(distinct P1.salle) from passe P1 where salle like 'G%' and not exists
(select * from realise R where realisateur = 'Reiner' and not exists
(select * from passe P2 where P2.titre = R.titre and P2.horaire > '18:00'
and P2.salle = P1.salle));