Vous êtes sur la page 1sur 6

TP d’informatique n◦014

Bases de données
PCSI 2015 – 2016

I Schéma
Soit le schéma relationnel suivant :
— Individus(Num_Ind, Nom, Prenom) : l’identifiant de l’individu ( Num_Ind), le nom et le prénom de
l’individu.
— Jouer(Num_Ind, Num_Film, Role) : les attributs représentant respectivement le numéro individu
(Num_Ind), le numéro du film (Num_Film) dans lequel il a joué, et le nom du rôle joué.
— Films(Num_Film Num_Ind, Titre, Genre, Annee) : le numéro du film (Num_Film), l’identifiant du
réalisateur ( Num_Ind), et les caractéristiques du film.
— Projection(Num_Cine, Num_Film, Date) Le numéro du cinéma dans lequel a été projeté le film à la
date indiqué.
— Cinémas(Num_Cine, Nom, Adresse)Un identifiant des cinémas, ainsi que leur nom et adresse.
Le tableau dans les pages suivantes donne une instance de ce schéma relationnel.

II Structure de la base de donnée


Représenter la base de donnée sous forme d’un schéma bloc en indiquant en titre de chaque bloc le nom
de la table, en dessous les attributs, en soulignant les clés primaires et en indiquant via des flèches les clés
étrangères.
Par exemple dans le TP précédent le schéma aurait été :

Artiste Oeuvre Musee


idA idO Numero
Nom Par Titre Avoir NomMusee
Origine Artiste Genre Musee Ouverture
Epoque Oeuvre Estimation Oeuvre Fermeture
Assurance

Gardez ce schéma sous les yeux pour les requêtes, cela aide à voir les conditions nécessaires pour les
jointures.

III Exercices
Donner les requêtes SQL permettant de répondre aux questions suivantes :
1. Quel est le contenu de la table individus ?
2. Quels sont les prénoms des individus en conservant les doublons ?
3. Quels sont les prénoms des individus en conservant les doublons, mais en les classant par ordre
alphabétique ? (La clause à utiliser est ORDER BY, regardez la syntaxe sur internet)
4. Quels sont les prénoms des individus sans doublons ? Observez le résultat en effectuant un classe-
ment alphabétique et sans effectuer de classement.
5. Quels sont les individus dont le prénom est John ?

1
TP d’informatique n◦ 14 Base de données

6. Quel est le nom des individus dont le prénom est John ?


7. Dressez la liste de toutes les associations possibles entre un individu et un film (il n’y a pas nécessai-
rement de lien entre l’individu et le film qu’on lui associe). Observez le nombre de lignes retournées.
Était-il prévisible ?
8. Quels sont les individus qui sont des acteurs ? les acteurs jouent dans les films ...
9. Dressez la liste de toutes les associations possibles entre un acteur et un film (il n’y a pas nécessai-
rement de lien entre l’acteur et le film qu’on lui associe). Observez le nombre de lignes retournées.
10. Dressez la liste de toutes les interprétations, en précisant le rôle, d’acteur, dont on précisera le nom
et le prénom, ayant joué dans des films dont on précisera le titre. Le résultat sera de la forme :
\# | Prénom | Nom | Rôle | Titre
1 | Nicole | Kidman | Grace | Dogville
11. Même question que la précédente, mais en formatant le résultat de la manière suivante :
Nicole Kidman a joué le rôle de Grace dans le film Dogville
Paul Bettany a joué le rôle de Tom Edison dans le film Dogville
...
Paul Mazursky a joué le rôle de May Day dans le film Dangereusement vôtr
12. Quels sont les titres des films dont le genre est Drame ?
13. Quels films (titres) ont été projetés en 2002 ? On pourra utiliser le mot clé LIKE (en cherchant de la
documentation) ou utiliser les opérateurs de comparaison sur les dates.
14. Donnez le titre des films réalisés par Lars von Trier.
15. Quels films sont projetés au cinéma Le Fontenelle ?
16. Quels sont les noms et prénoms des réalisateurs ?
17. Quels sont les noms et prénoms des acteurs qui sont également réalisateurs ?
18. Quels acteurs a-t-on pu voir au cinéma Le Fontenelle depuis l’an 2000 ?
19. Quels sont les titres des films où Nicole Kidman a joué un rôle et qui ont été projetés au cinéma Le
Fontenelle ?
20. On désire le nom et le prénom des acteurs et le nombre de films dans lequel ils ont joué.
21. On désire connaitre le nom et le prénom des acteurs ainsi que l’année de leur premier et de leur
dernier rôle
22. Nom et prénom des acteurs qui ont joué dans au moins deux films.
23. On désire le nom et prénom des acteurs et le nombre de drames dans lesquels ils ont joué.
24. Quels sont les réalisateurs qui ont réalisé des films d’épouvante et des films dramatiques ?
25. Quels sont les acteurs qui n’ont pas joué dans des films dramatiques ?
26. Quels sont les noms et prénoms des individus dont le prénom est à la fois celui d’un acteur et celui
d’un réalisateur sans qu’il s’agisse de la même personne ? (Un peu difficile, pensez à décomposer
en sous-problème)
27. Quels sont les cinémas qui ont projeté au moins 80% des films ?
28. Quel est le nombre de films réalisés par chacun des réalisateurs ?
29. Combien de films a réalisé le réalisateur le plus productif ?
30. Quel est le nombre de films réalisés par les réalisateurs dont on désire connaitre le nom et le prénom,
ayant réalisé au moins un film du même genre que l’un des films réalisés par David Cronenberg ?
31. On suppose que les têtes d’affiche d’un film sont les acteurs recensés pour ce film dans la base de
données. Quel est le nombre de têtes d’affiche et le réalisateur de chacun des films ?

PCSI Page 2/6


TP d’informatique n◦ 14 Base de données

Individus
Num_Ind Nom Prenom Projection
1 Kidman Nicole Num_Cine Num_Film Date
2 Bettany Paul 3 6 1960-11-09
3 Watson Emily 1 6 1980-07-05
4 Skarsgard Stellan 2 7 1985-05-09
5 Travolta John 1 2 1988-03-12
6 L.Jackson Samuel 2 2 1990-09-25
7 Willis Bruce 3 6 1990-12-02
8 Irons Jeremy 4 3 1994-04-08
9 Spader James 3 3 1994-11-05
10 Hunter Holly 4 3 1994-11-06
11 Arquette Rosanna 1 1 1996-05-07
12 Wayne John 1 4 1996-08-02
13 von Trier Lars 2 4 1996-09-02
14 Tarantino Quentin 2 4 1996-12-02
15 Cronenberg David 2 5 2002-05-01
16 Mazursky Paul 2 5 2002-05-02
17 Jones Grace 2 5 2002-05-03
18 Glen John 4 6 2002-08-01
19 Ford John

Jouer
Num_Ind Num_Film Rôle
1 5 Grace
2 5 Tom Edison
3 4 Bess
4 4 Jan Cinemas
5 3 Vincent Vega Num_Cine Nom Adresse
6 3 Jules Winn ?eld 1 Le Renoir 13100 Aix_en_Provence
7 3 Butch Coolidge 2 Le Fontenelle 78160 Marly_le_Roi
8 2 Beverly & ElliotMantle 3 Gaumont Wilson 31000 Toulouse
9 1 James Ballard 4 Espace Cine 93800 Epinay_sur_Seine
10 1 Helen Remington
11 1 Gabrielle
4 5 Chuck
16 7 May Day
12 8 Ringo Kid

Films
Num_Film Num_Ind Titre Genre Annee
1 15 Crash Drame 1996
2 15 Faux_Semblants Epouvante 1988
3 14 Pulp Fiction Policier 1994
4 13 Breaking the waves Drame 1996
5 13 Dogville Drame 2002
6 12 Alamo Western 1960
7 18 Dangereusement vôtre Espionnage 1985
8 19 La Chevauchee fantastique Western 1939

PCSI Page 3/6


TP d’informatique n◦ 14 Base de données

IV Correction
1. Quel est le contenu de la table individus ? SELECT * FROM individus 19 lignes
2. Quels sont les prénoms des individus en conservant les doublons ? SELECT ALL prenom FROM
individus 19 lignes
3. Quels sont les prénoms des individus en conservant les doublons, mais en les classant par ordre
alphabétique ? SELECT ALL prenom FROM individus ORDER BY prenom ASC 19 lignes
4. Quels sont les prénoms des individus sans doublons ? Observez le résultat en effectuant un classe-
ment alphabétique et sans effectuer de classement. SELECT DISTINCT prenom FROM individus
ORDER BY prenom ASC 15 lignes
5. Quels sont les individus dont le prénom est John ? SELECT * FROM individus WHERE prenom =
"John" 4 lignes
6. Quel est le nom des individus dont le prénom est John ? SELECT nom FROM individus WHERE
prenom = "John" 4 lignes
7. Dressez la liste de toutes les associations possibles entre un individu et un film (il n’y a pas nécessai-
rement de lien entre l’individu et le film qu’on lui associe). Observez le nombre de lignes retournées.
Était-il prévisible ? SELECT * FROM individus, films 152 lignes = nombre de lignes d’individus
× nombre de lignes de films
8. Quels sont les individus qui sont des acteurs ? les acteurs jouent dans les films ... SELECT * FROM
individus JOIN jouer ON individus.Num_ind = jouer.Num_ind 14 lignes
9. Dressez la liste de toutes les associations possibles entre un acteur et un film (il n’y a pas nécessai-
rement de lien entre l’acteur et le film qu’on lui associe). Observez le nombre de lignes retournées.
SELECT * FROM individus JOIN jouer ON individus.Num_Ind=jouer.Num_Ind JOIN films 112
lignes
10. Dressez la liste de toutes les interprétations, en précisant le rôle, d’acteur, dont on précisera le nom
et le prénom, ayant joué dans des films dont on précisera le titre. Le résultat sera de la forme :

Même question que la précédente, mais en formatant le résultat de la


manière suivante :

SELECT * FROM films JOIN projection ON films.Num_Film = projection.Num_F


WHERE projection.date > ’2001-12-31’ and projection.date <= "2002-12-31"
Donnez le titre des films réalisés par Lars von Trier. SELECT * FROM
films JOIN individus ON films.Num_Ind = individus.Num_Ind WHERE Nom
= "von Trier" AND Prenom = "Lars"
Quels films sont projetés au cinéma Le Fontenelle ? SELECT * FROM films
JOIN Projection ON films.Num_Film = Projection.Num_Film JOIN Cinemas
ON Cinemas.Num_Cine = Projection.Num_Cine WHERE Nom = "Le Fontenelle"

Quels sont les noms et prénoms des réalisateurs ? SELECT Nom, Prenom
FROM films JOIN individus on films.Num_Ind = individus.Num_Ind
Quels sont les noms et prénoms des acteurs qui sont également réalisateu
SELECT Nom, Prenom FROM Individus JOIN Films ON Films.Num_Ind = Individ
JOIN Jouer ON Films.Num_Ind = Jouer.Num_Ind
Quels acteurs a-t-on pu voir au cinéma Le Fontenelle depuis l’an 2000 ?
SELECT * FROM Individus JOIN Jouer ON Individus.Num_Ind = Jouer.Num_Ind

PCSI Page 4/6


TP d’informatique n◦ 14 Base de données

JOIN Films ON Jouer.Num_Film = Films.Num_Film JOIN Projection ON Films.N


= Projection.Num_Film JOIN Cinemas ON Projection.Num_Cine = Cinemas.Num_
WHERE Cinemas.Nom = "Le Fontenelle" AND Projection.date>="2000-01-01"

Quels sont les titres des films où Nicole Kidman a joué un rôle et qui
ont été projetés au cinéma Le Fontenelle ? SELECT DISTINCT Films.Titre
AS "Nom du film" FROM Individus JOIN Jouer ON Individus.Num_Ind = Jouer.
JOIN Films ON Jouer.Num_Film = Films.Num_Film JOIN Projection ON Films.N
= Projection.Num_Film JOIN Cinemas ON Projection.Num_Cine = Cinemas.Num_
WHERE Cinemas.Nom = "Le Fontenelle" AND Individus.Nom = "Kidman" AND
Individus.Prenom = "Nicole"
On désire le nom et le prénom des acteurs et le nombre de films dans
lequel ils ont joué. SELECT Nom, Prenom, COUNT(*) as nombre FROM Indivi
JOIN Jouer ON Individus.Num_Ind = Jouer.Num_Ind GROUP BY Individus.Num_I

On désire connaitre le nom et le prénom des acteurs ainsi que l’année


de leur premier et de leur dernier rôle SELECT Nom, Prenom, MIN(Annee)
AS premier_role, MAX(Annee) as dernier_role FROM Individus JOIN Jouer
ON Individus.Num_Ind = Jouer.Num_Ind JOIN Films ON Jouer.Num_Film =
Films.Num_Film GROUP BY Individus.Num_Ind
Nom et prénom des acteurs qui ont joué dans au moins deux films. SELECT
Nom, Prenom FROM Individus JOIN Jouer ON Individus.Num_Ind = Jouer.Num_I
JOIN Films ON Jouer.Num_Film = Films.Num_Film GROUP BY Individus.Num_Ind
HAVING COUNT(*)>1
On désire le nom et prénom des acteurs et le nombre de drames dans lesqu
ils ont joué. SELECT Nom, Prenom, COUNT(*) FROM Individus JOIN Jouer
ON Individus.Num_Ind = Jouer.Num_Ind JOIN Films ON Jouer.Num_Film =
Films.Num_Film WHERE Genre = "Drame" GROUP BY Individus.Num_Ind
Problème : n’affiche pas 0 s’ils n’ont joué dans aucun drame
Quels sont les réalisateurs qui ont réalisé des films d’épouvante et
des films dramatiques? SELECT DISTINCT Nom, Prenom FROM Individus JOIN
Films ON Films.Num_Ind = Individus.Num_Ind WHERE Genre = "Drame" INTERSE
SELECT DISTINCT Nom, Prenom FROM Individus JOIN Films ON Films.Num_Ind
= Individus.Num_Ind WHERE Genre = "Epouvante"
Quels sont les acteurs qui n’ont pas joué dans des films dramatiques?
SELECT Nom, Prenom FROM Individus JOIN Jouer ON Individus.Num_Ind =
Jouer.Num_Ind JOIN Films ON Jouer.Num_Film = Films.Num_Film EXCEPT SELEC
Nom, Prenom FROM Individus JOIN Jouer ON Individus.Num_Ind = Jouer.Num_I
JOIN Films ON Jouer.Num_Film = Films.Num_Film WHERE Genre = "Drame"

Quels sont les noms et prénoms des individus dont le prénom est à la
fois celui d’un acteur et celui d’un réalisateur sans qu’il s’agisse
de la même personne? étape 1 : nom et prénom des individus dont le
prénom est à la fois celui d’un acteur et d’un réalisateur :
SELECT Nom,Prenom FROM Individus WHERE Prenom = ( SELECT Prenom FROM
Individus JOIN Jouer ON Individus.Num_Ind = Jouer.Num_Ind JOIN Films
ON Jouer.Num_Film = Films.Num_Film INTERSECT SELECT Prenom FROM Individu
JOIN Films ON Individus.Num_Ind = Films.Num_Ind )

PCSI Page 5/6


TP d’informatique n◦ 14 Base de données

Au complet :
SELECT Nom,Prenom FROM Individus WHERE Prenom = ( SELECT Prenom FROM
Individus JOIN Jouer ON Individus.Num_Ind = Jouer.Num_Ind JOIN Films
ON Jouer.Num_Film = Films.Num_Film INTERSECT SELECT Prenom FROM Individu
JOIN Films ON Individus.Num_Ind = Films.Num_Ind ) AND NOT Individus.Num_
=( SELECT Individus.Num_Ind FROM Individus JOIN Jouer ON Individus.Num_I
= Jouer.Num_Ind JOIN Films ON Jouer.Num_Film = Films.Num_Film INTERSECT
SELECT Individus.Num_Ind FROM Individus JOIN Films ON Individus.Num_Ind
= Films.Num_Ind )

Quels sont les cinémas qui ont projeté au moinds 80% des films? SELECT
Cinemas.Nom FROM Cinemas JOIN Projection ON Cinemas.Num_Cine = Projectio
GROUP BY Cinemas.Num_Cine HAVING COUNT(*) >= 0.8*(SELECT COUNT(*) FROM
Films)
Quel est le nombre de films réalisés par chacun des réalisateurs? SELEC
Nom, Prenom, COUNT(*) FROM Individus JOIN Films ON Films.Num_Ind = Indiv
GROUP BY Individus.Num_Ind
Combien de films a réalisé le réalisateur le plus productif? SELECT
MAX(Nombre) FROM (SELECT COUNT(*) AS Nombre FROM Individus JOIN Films
ON Films.Num_Ind = Individus.Num_Ind GROUP BY Individus.Num_Ind)
Quel est le nombre de films réalisés par les réalisateurs dont on désire
connaitre le nom et le prénom, ayant réalisé au moins un film du même
genre que l’un des films réalisés par David Cronenberg? Genre des films
réalisé par David :
SELECT Genre FROM Films JOIN Individus ON Films.Num_Ind = Individus.Num_
WHERE Nom = "Cronenberg" AND Prenom = "David"

SELECT Nom,Prenom,COUNT(*) FROM Individus JOIN Films ON Films.Num_Ind


= Individus.Num_Ind WHERE Genre IN( SELECT Genre FROM Films JOIN Individ
ON Films.Num_Ind = Individus.Num_Ind WHERE Nom = "Cronenberg" AND Prenom
= "David") GROUP BY Individus.Num_Ind
On suppose que les têtes d’affiche d’un film sont les acteurs recensés
pour ce film dans la base de données. Quel est le nombre de têtes d’affi
et le réalisateur de chacun des films? SELECT Titre, Nom, COUNT(*)
FROM Films JOIN Individus ON Individus.Num_Ind = Films.Num_Ind -ça,
c’est les réalisateurs JOIN Jouer ON Films.Num_Film = Jouer.Num_Film
GROUP BY Films.Num_Film

PCSI Page 6/6

Vous aimerez peut-être aussi