Académique Documents
Professionnel Documents
Culture Documents
Février 2019
TD N°1
Interrogation d'une base de données relationnelle
Convention d'écriture : Dans tout schéma de base de données, une clé primaire est soulignée et une
clé étrangère est augmentée de "*".
1. R1 = Salle [idCours] 6. R6 = R4 ∩ R5
2. R2 = Salle [idSalle=S2] 7. R7= Cours x Salle
3. R3 = Salle – R2 8. R8 = Cours [Cours.idCours=Salle.idCours] Salle
4. R4= Cours [Jour="Mardi" AND Heure>8] 9. R9 = Notes [idCours, IdEtud]
5. R5= Cours [Heure>8] 10. R10= R9 ÷ R1
Page 1
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
B/ On veut afficher :
5. Les acteurs (nom et prénom) qui n’ont pas joué dans des films dramatiques?
6. Le nom des réalisateurs qui n'ont produit des films qu'en 2016.
7. Le nombre de films dramatiques qui ont été projetés au cinéma El-Manar en 2018.
8. Le titre du dernier film projeté au cinéma El-Manar.
C/ On veut afficher :
9. Les noms des cinémas qui ont projeté tous les films.
10. Pour chaque cinéma (num et nom), le nombre de films projetés en 2018.
11. Les réalisateurs (nom et prénom) qui ont réalisé entre 6 et 10 films.
Questions supplémentaires :
Corrigé type
Partie 01 : Algèbre relationnelle
Page 2
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
B/
1. R1 = Salle [idCours]
Nature : Projection
Sémantique : La liste des cours
R1
idCours
BD
SE
SD
2. R2 = Salle [idSalle=S1]
Nature : Selection
Sémantique : Les cours qui se déroulent en salle 1
R2
idCours idSalle
BD S1
SD S1
3. R3 = Salle – R2
Nature : Différence
Sémantique : Les cours qui ne se déroulent pas en salle 1
R3
idCours idEtud Note
BD 100 16
SE 100 14
SD 100 15
BD 200 12
BD 300 13
SD 200 17
6. R6 = R4 U R5
Nature : Sélection
Sémantique : Les cours qui se déroulent Lundi et Mardi à partir de 8h
Page 3
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
R9
idCours idEtud
BD 100
SE 100
SD 100
BD 200
BD 300
SD 200
B/
1. Donner la liste des cours (idCours, heure) assurés chaque Lundi.
R1 = cours[jour = ‘Lundi’]
Res = R1[idCours, heure]
2. Quels sont les étudiants (idEtud, NomEtud) admis dans le module Bases de Données.
R1 = Notes[note >=10 AND idCours=’BD’]
Res = R1[idEtud].
Page 4
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
4. Quels sont les étudiants (idEtud) qui ont eu la même note en BD et SE (par exemple l'étudiant de code
100 a eu 12 en BD et 12 en SE, L'étudiant de code 200 a eu 15 en BD et 15 en SE)
R1 = Notes [idcours=”BD”]
R2 = Notes [idcours =”SE”]
R3 = R1[R1.idEtud=R2.idEtud AND R1.note = R2.note] R1
Res = R3[idEtud]
5. Quels sont les cours suivis par l'étudiant de code 100 et non pas par l'étudiant de code 300.
R1 = notes[idEtud=100]
R2 = R1[idCours]
R3 = notes[idEtud=300]
R4 = R1[idCours]
Res = R2 – R4
6. Donner la liste des étudiants (idEtud et nom) inscrits à tous les cours.
R1 = Notes[Notes.idEtud=Etudiants.idEtud]
R2 = R1[idEtud, nomEtud, idCours]
R3 = Cours[idCours]
Res = R2 ÷ R3
7. Quels sont les étudiants (id et nom) qui suivent au moins les mêmes cours suivis par l'étudiant de nom
"Benali".
R1= Etudiants[nomEtud = "Benali"]
R2 = R1[idEtud]
R3 = R1 [R1.idEtud = Notes.idEtud] Notes
R4 = R3[idcours]
R5 = Notes[idEtud, idCours]
R6 = R5 ÷ R4
R6 = R5 [R5.idEtud = Etudiants.idEtud] Etudiants
Res = R6 [idEtud, nomEtud]
Page 5
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
OU BIEN
SELECT num_film
FROM film F
WHERE num_film IN ( SELECT num_film
FROM projection
WHERE jour LIKE “%2017”
AND num_cinema IN ( SELECT num_cinema
FROM Cinéma
WHERE nom = “El-Manar")
)
3. Les acteurs (nom et prénom) du film "La planète des singes".
SELECT nom , prénom
FROM Individu I, Jouer J, film F
WHERE I. num_individu = J.num_acteur AND J_num-film = F.num_film
AND titre = "La planète des singes"
OU BIEN
SELECT nom , prénom
FROM Individu
WHERE num_individu IN ( SELECT num_acteur
FROM jouer
WHERE num_film IN (SELECT num_film
FROM film
WHERE titre = "La planète des singes"))
OU BIEN
SELECT nom , prénom
FROM Individu
WHERE num_individu IN ( SELECT num_acteur
FROM jouer J, film F
WHERE J.num_acteur = F.num_realisateur)
B/
5. Les acteurs (nom et prénom) qui n’ont pas joué dans des films dramatiques?
Page 6
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
OU BIEN
SELECT nom, premon
FROM individu I
WHERE NOT EXISTS (SELECT num-acteur FROM jouer J, Film F
WHERE J.num-film = F.num_film
AND genre = “dramatique”
AND J.num_acteur = I.num_individu)
6. Le nom des réalisateurs qui n'ont produit des films qu'en 2016.
SELECt nom
FROM Individu I
WHERE 2016 >ALL (SELECT année FROM Film WHERE num_realisateur = I.num_individu)
OU BIEN :
SELECT nom
FROM individu I
WHERE NOT EXISTS (SELECT num_film
FROM film F
WHERE année != 2016
AND I.num_individu = F.num_realisateur)
7. Le nombre de films dramatiques qui ont été projetés au cinéma El-Manar en 2018.
SELECT COUNT (num_film)
FROM film
WHERE genre = “dramatique”
AND num_film IN (SELECT num_film FROM projection
WHERE num_cinema IN (SELECT num_cinema FROM cinema
WHERE nom = “EL-Manar”)
AND jour LIKE “%2018”)
OU BIEN
SELECT COUNT ( DISTINCT num_film) /* Si le DISTINCT n'est pas précisé, on aura le nombre de projections de
films dramatiques*/
FROM film F, projection P, cinema C
WHERE F.num_film = P.num_film
AND P.num_cinema = C.num_cinema
AND genre = “dramatique”
AND C.nom = “EL-Manar”
AND jour LIKE “%2018”
Page 7
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
OU BIEN
SELECT titre
FROM film F, projection P, cinema C
WHERE F.num_film = P.num_film
AND P.num_cinema = C.num_cinema
AND nom="El-Manar"
AND jour = (SELECT MAX (jour)
FROM projection P1, cinema C1
WHERE P.num_cinema= C.num_cinema
AND nom="El-Manar")
C/
9. Les noms des cinémas qui ont projeté tous les films ?
ère
1 solution : Non supportée par MySql (voir Cours : Opération de Division)
SELECT nom
FROM cinema C
WHERE num_cinema IN ( SELECT num_cinema
FROM projection
GROUP BY num_cinema
HAVING SET(num_film) CONTAINS (SELECT num_film FROM film))
OU BIEN :
/*Toutes les jointures en dessus et en dessous peuvent être exprimées par des restrictions sur le
produit cartésien*/
SELECT nom
Page 8
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
10. Pour chaque cinéma (num et nom), le nombre de films projetés en 2018.
/* Si le DISTINCT n'est pas précisé, on aura pour chaque cinéma le nombre de projections de 2018 et non pas le nombre
de films projetés */
SELECT num_cinema, COUNT (DISTINCT num_film)
FROM projection
WHERE jour LIKE “%2018”
GROUP BY num_cinema
11. Les réalisateurs (nom et prénom) qui ont réalisé entre 6 et 10 films.
SELECT nom, prenom
FROM individu
WHERE num-individu IN (SELECT num_réalisateur
FROM film
GROUP BY num_realisateur
HAVING COUNT(*) <=10 AND COUNT(*) >=6)
Questions supplémentaires :
1. Les acteurs (nom et prénom) qui ont joué dans un seul film d'actions.
SELECT nom, premon
FROM individu WHERE num-individu IN (SELECT num-acteur FROM jouer J, film F
WHERE J.num_film = F.num_film
Page 9
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
2. Les cinémas (nom) qui ont projeté au moins tous les films projetés au cinéma "El-Manar".
ère
1 solution : Non supportée par MySql (voir Cours : Opération de Division)
SELECT nom
From cinéma
WHERE num_cinema IN (SELECT num-cinema
FROM projection
GROUP BY num_cinema
HAVING SET(num_film) CONTAINS (SELECT num-film
FROM projection
WHERE num_cinema IN (SELECT
num_cinema
FROM cinema
WHERE nom =
“El-manar”))
)
ème
2 solution : Supportée par MySql
SELECT nom
From cinéma C
WHERE NOT EXISTS (SELECT num_film
FROM film
WHERE num_film IN (SELECT num_film
FROM projection P
WHERE num_cinema IN (SELECT num-cinema
FROM cinema
WHERE nom = “El-manar”))
AND num_film NOT IN (SELECT num_film
FROM projection P
WHERE C.num_cinema = P.num_cinema)
)
Page 10
Université A. Mehri, Constantine2 Faculté NTIC Année universitaire : 2018/2019
Module : Introduction aux bases de données Niveau : 2ème Année LMD
FROM film
WHERE num_réalisateur IN (SELECT num_individu FROM individu
WHERE nom = “Peter Jackson")
AND année = (SELECT MIN (année)
FROM film
WHERE num_realisateur IN (SELECT num_individu FROM individu
WHERE nom = “Peter Jackson »))
Page 11