Académique Documents
Professionnel Documents
Culture Documents
...). Cette base est inspirée de ce site. Le schéma relationnel de cette base est décrit ci-
dessous :
Un film est décrit de manière unique par un identifiant (entier, clé de la relation), un titre,
une année (première sortie du film), un score (moyenne de tous les votes pour ce film),
un nombre de votants et un réalisateur (entier, clé étrangère sur realisateurs).
Un acteur est décrit de manière unique par un identifiant (entier, clé de la relation) et un
nom.
Un acteur peut jouer un role dans zéro ou plusieurs films et un film a zéro ou plusieurs
acteurs dans sa distribution. L'attribut rang indique le statut de l'acteur dans le film
(rang=1 indique que l'acteur est la vedette du film). Le couple (idacteur, idfilm) est la clé
de la relation distributions. idacteur est une clé étrangère sur acteurs et idfilm est une clé
étrangère sur films.
Un réalisateur est identifié de manière unique par son identifiant (entier, clé de la
relation) et un nom.
1.1 Donner la liste des films (id, titre et annee) triée par titre.
From FILMS
Order by titre
Select *
From FILMS
1.3 Quels sont les acteurs principaux (rang=1) des films sortis en 2000 ? On veut l'id et le
nom triés par nom.
Order by a.nom
ou bien
Order by a.nom
1.5 Donner les id des films sortis avant 1930 ou bien dans lesquels joue l'acteur de id 12.
Select id
From FILMS
Where annee < 1930
Union
Select idFilm
From DISTRIBUTIONS
Where idActeur =12
1.6 Donner le nom des vedettes (rang=1) du film ayant l'id 11, dans l'ordre alphabétique.
Select nom
Order by nom
1 tuple
Autres solutions :
Select nom
Order by nom
Select nom
From ACTEURS
From DISTRIBUTIONS
Order By nom
Select A.nom
From ACTEURS A
From DISTRIBUTIONS D
Order By A.nom
1.7 Donner les noms des réalisateurs de films sortis avant 1970 et ayant 'the' dans leur
titre.
Where R.id=f.idrealisateur and f.annee < 1970 and f.titre like '%the%'
Erreurs classiques :
- le distinct est utilisé ici car un réalisateur peut avoir réalisé deux films différents
remplissant les conditions.
ou bien
1.8 Donner les id et titre des films n'ayant aucun acteur dans leur distribution.
From FILMS
MINUS
Where id=idFilm
or
From FILMS
MINUS
1.9 Donner les films (id et titre) sortis en 2000 et ayant au moins deux acteurs dans leur
distribution.
ou bien
1.10 Donner le(s) film(s) (id, titre) avec le score le plus haut.
From FILMS
Minus
ou bien
From FILMS
Minus
2.1 Donner le nombre total de films dirigés par le réalisateur d'id 11.
Select count(*)
From FILMS
Where idrealisateur = 11
2.2 Donner la liste des noms de réalisateurs, dans l'ordre alphabétique. Pour chaque
réalisateur, donner son nom et le nombre de films réalisés.
Where f.idrealisateur=r.id
Order By r.nom
ou bien
Order By r.nom
2.3 Pour chaque film, donner son id, son titre et son nombre total d'acteurs.
Where f.id=d.idFilm
ou bien
Where a.id=d.idActeur
Erreurs classiques :
b) oublier a.id dans le Group By => des acteurs avec le même nom vont se trouver dans
le même groupe alors qu'ils ont un id différent (nom n'est pas clé pour ACTEURS).
ou bien
2.5 Quels sont les réalisateurs (id et nom) qui ont dirigé le plus grand nombre de films ?
Sous Oracle uniquement (max(count(*)) ne fonctionne pas sous MySQL et sous postgreSQL)
Select r.id, r.nom
From REALISATEURS r, FILMS f
Where f.idrealisateur=r.id
Group By r.id, r.nom
Having count(*) = (Select max(count(*)) From FILMS Group By
idrealisateur)