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.
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
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
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 :
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
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
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 )
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"