Académique Documents
Professionnel Documents
Culture Documents
Bases de Données
SELECT DISTINCT GENRE
FROM FILM
TD : langage assertionnel – SQL
Trouver le titre et l’année des films de science fiction dont le budget
Requête!4!:
dépasse 5.000.000 $.
Corrigé SELECT TITRE, ANNÉE
FROM FILM
WHERE GENRE = ‘SciFi’
Liste des requêtes à exprimer en SQL. AND BUDGET > 5000000
Tracer le graphe des clés étrangères avant de commencer à répondre aux requêtes.
Graphe de la requête :
PERSONNE
GENRE = ‘SciFi’
BUDGET > 5000000
ACTEUR
CINÉMA
F
DISTRIBUTION
TITRE, ANNÉE
Requête!2!: Retrouver la liste des films dont la longueur dépasse 180 min.
Requête!6!: Donner le nombre de films de 1960 par genre.
SELECT *
SELECT GENRE, COUNT (*)
FROM FILM
FROM FILM
WHERE LONGUEUR > 180
WHERE ANNÉE = 1960
GROUP BY GENRE
Requêtes faciles Graphe de la requête : la requête imbriquée ne contribue pas au résultat
TI
TR
AND P.NOM = ‘Polanski’
E
Graphe de la requête :
Res
PRÉNOM = ‘Roman’
NOM = ‘Polanski’
RÉALISATEUR = NUMP
Requête!8!: Quels sont les acteurs comiques (nom, prénom) qui ont joué dans un
film de Spielberg.
F P Graphe de la requête :
TI
TR
E
SPÉCIALITÉ =
‘Comique’
Forme plate :
SELECT PA.PRÉNOM, PA.NOM
FROM PERSONNE PA, DISTRIBUTION D, FILM F, PERSONNE PR
WHERE PA.NUMP = D.NUMA
Graphe de la requête :
SPÉCIALITÉ =
‘Comique’ RÔLE =
‘Gavroche’
NUMF = NUMF NUMP = NUMA
MA RÉALISA
= NU TEUR = NU NUMF = NUMF
MA
MP
NU D F NOM =
D
TITRE =
‘Spielberg’
‘Les misérables’
PR
PA P F
PR
ÉN PR
O ÉN TE
M, OM DA
NO ,N
M OM
Res Res
RÔLE = F D
‘Gavroche’
RÉ
A NUMF = NUMF
NUM NUM
A
P= F=N
NUM
LIS
UM F
D
MA
AT
TITRE =
NU
EU
‘Les misérables’
=
MP
=N
F
NU
UM
P P
P
PR
ÉN E
OM D AT
,N
OM PRÉNOM, NOM
Res Res
Requête!11!: Donner le nom et le prénom des réalisateurs qui ont joué dans au
Requête!12!: Quel est le total des salaires des acteurs du film «!Nuits blanches à
moins un de leurs propres films.
Seattle!».
Forme plate :
Forme plate :
SELECT DISTINCT P.PRÉNOM, P.NOM
SELECT SUM (D.SALAIRE)
FROM PERSONNE P, FILM F, DISTRIBUTION D
FROM DISTRIBUTION D, FILM F
WHERE P.NUMP = F.RÉALISATEUR
WHERE DISTRIBUTION.NUMF = F.NUMF
AND F.NUMF = D.NUMF
AND F.TITRE = ‘Nuits blanches à Seattle’
AND D.NUMA = F.RÉALISATEUR
Forme imbriquée :
SELECT SUM (SALAIRE)
Requête!15!: Pour chaque film de Spielberg (titre, année), donner le total des
D F
salaires des acteurs.
SA
LA
Forme plate :
IR
E
N
U
M
WHERE C.COMPAGNIE = ‘Fox’
F,
TI
TR
AND C.VILLE = ‘Paris’
E
AND (C.NUMC, F.NUMF) IN (
SELECT S.NUMC, P.NUMF
FROM SALLE S, PASSE P Res
WHERE S.NBPLACES >= 200
AND S.TAILLE_ÉCRAN > 30 Forme imbriquée 1 – prédicat IN : pour trouver ceux qui passent dans un cinéma
AND S.NUMC = P.NUMC de la Fox
AND S.NUMS = P.NUMS SELECT DISTINCT NUMF, TITRE
AND P.HORAIRE < ’22!:00’ ) FROM FILM
AND F.RÉALISATEUR IN ( WHERE NUMF IN (
SELECT NUMP SELECT NUMF
FROM PERSONNE FROM PASSE
WHERE PRÉNOM = ‘Elia’ WHERE NUMC IN (
AND NOM = ‘Kazan’ ) SELECT NUMC
FROM CINÉMA
WHERE COMPAGNIE = ‘Fox’ ) )
Requête!18!: Trouver le titre des films qui ne passent à aucun cinéma de la
compagnie FOX. Forme imbriquée 2 – prédicat EXISTS : toujours pour trouver ceux qui passent
On commence par poser la requête inverse!: les films qui passent dans un (au dans un cinéma de la Fox
moins) cinéma de la Fox. SELECT DISTINCT NUMF, TITRE
FROM FILM F
Forme plate : pour trouver ceux qui passent dans un cinéma de la Fox WHERE EXISTS (
SELECT DISTINCT F.NUMF, F.TITRE SELECT *
FROM FILM F, PASSE P, CINÉMA C FROM PASSE P
WHERE F.NUMF = P.NUMF WHERE P.NUMF = F.NUMF
AND P.NUMC = C.NUMC AND EXISTS (
AND C.COMPAGNIE = ‘Fox’
MA
NU
WHERE PA.NUMP = D.NUMA
=
MP
GROUP BY D.NUMA, D.NUMF, PA.PRÉNOM, PA.NOM
NU
P HAVING SUM (SALAIRE) > (
SELECT SALAIRE_RÉAL
PRÉNOM, NOM FROM FILM F
WHERE D.NUMF = F.NUMF ) )
Res Forme imbriquée SQL-92 :
SELECT PRÉNOM, NOM
Forme imbriquée 1 : FROM PERSONNE
SELECT PRÉNOM, NOM WHERE NUMP IN (
FROM PERSONNE SELECT NUMA
WHERE NUMP IN ( FROM DISTRIBUTION D
SELECT D.NUMA GROUP BY NUMA, NUMF
FROM DISTRIBUTION D, FILM F HAVING SUM (SALAIRE) > (
WHERE D.NUMF = F.NUMF SELECT SALAIRE_RÉAL
AND D.SALAIRE > F.SALAIRE_RÉAL ) FROM FILM F
WHERE D.NUMF = F.NUMF ) )
Forme imbriquée 2!:
SELECT PRÉNOM, NOM Requêtes difficiles
FROM PERSONNE
WHERE NUMP IN (
Requête!20!: Trouver les couples acteur-réalisateur (noms et prénoms) tels que
SELECT NUMA l’un a dirigé l’autre sur un film et vice-versa sur un autre.
FROM DISTRIBUTION D
WHERE D.SALAIRE > ( Forme plate :
SELECT F.SALAIRE_RÉAL SELECT DISTINCT P1.PRÉNOM, P1.NOM, P2.PRÉNOM, P2.NOM
FROM FILM F FROM PERSONNE P1, PERSONNE P2, FILM F1, FILM F2,