Bases de données
Correction du TD 2
Exercice 1
La table Immeubles
nomImm adresse nbEtages anneeConstruction nomGerant
Koudalou 3 Rue Blanche 15 1975 Doug
Barabas 2, allée Nikos 2 1973 Ross
La table Appartements
nomImm noApp superficie etage
Koudalou 1 150 14
Koudalou 34 50 15
Koudalou 51 200 2
Koudalou 52 50 5
Barabas 1 250 1
Barabas 2 250 2
La table Personnes
nom age profession
Ross 51 Informaticien
Alice 34 Cadre
Rachel 23 Stagiaire
William 52 Acteur
Doug 34 Rentier
La table Occupants
nomImm noApp nomOcc anneeArrivee
Koudalou 1 Rachel 1992
Barabas 1 Doug 1994
Barabas 2 Ross 1994
Koudalou 51 William 1996
Koudalou 34 Alice 1993
Exprimez les requêtes suivantes en langage SQL.
1. Nom des immeubles ayant strictement plus de 10 étages.
SELECT nomImm
FROM Immeubles
WHERE NbEtages>10
2. Nom des personnes ayant emménagé avant 1994.
SELECT nomOcc
FROM Occupants
WHERE anneeArrivee<1994
3. Qui habite le Koudalou ?
SELECT nomOcc
FROM Occupants
WHERE nomImm='Koudalou'
Nils Schaefer 1/7
Bases de données
4. Nom des informaticiens de plus de 25 ans.
SELECT nom
FROM Personnes
WHERE Profession='Informaticien' AND Age>25
5. Nom des immeubles ayant un appartement de plus de 150 m2.
SELECT nomImm
FROM Appartements
WHERE Superficie>150
6. Qui gère l’appartement où habite Rachel ?
SELECT nomGerant
FROM Occupants
JOIN Immeubles USING(nomImm)
WHERE nomOcc='Rachel'
7. Dans quel immeuble habite un acteur ?
SELECT DISTINCT nomImm
FROM occupants
JOIN personnes ON personnes.nom=occupants.nomOcc
WHERE profession='Acteur'
8. Qui habite un appartement de moins de 70 m2.
SELECT nomOcc
FROM occupants
JOIN appartements USING(noApp)
WHERE Superficie<70
9. Nom des personnes qui habitent au dernier étage de leur immeuble.
SELECT nomOcc
FROM occupants
JOIN immeubles USING(nomImm)
JOIN appartements USING(noApp)
WHER Etage=NbEtages
10. Qui a emménagé au moins 20 ans après la construction de son immeuble ?
SELECT nomOcc
FROM occupants
JOIN immeubles USING(nomImm)
WHERE AnneeArrivee-AnneeConstruction>20
11. Profession du gérant du Barabas ?
SELECT Profession
FROM Personnes
JOIN Immeubles ON Immeubles.nomGerant=Personnes.nom
WHERE nomImm='Barabas'
12. Couples de personnes ayant emménagé dans le même immeuble la même année.
SELECT o1.nomOcc,o2.nomOcc
FROM occupants AS o1
JOIN occupants AS o2 ON o1.nomImm=o2.nomImm AND o1.AnneeArrivee=o2.AnneeArrivee
Nils Schaefer 2/7
Bases de données
WHERE o1.nomOcc>o2.nomOcc
13. Age et profession des occupants de l’immeuble géré par Ross ?
SELECT Age,Profession
FROM Personnes
JOIN Occupants ON Personnes.Nom=Occupants.NomOcc
JOIN Immeubles USING(NomImm)
WHERE Immeubles.NomGerant='Ross'
14. Qui habite, dans un immeuble de plus de 10 étages, un appartement de plus de 100 m2.
SELECT nomOcc
FROM Occupants
JOIN Appartements USING(noApp)
JOIN Immeubles USING(nomImm)
WHERE NbEtages>10 AND Superficie>10
15. Couples de personnes habitant, dans le même immeuble, un appartement de même superficie.
SELECT o1.nomOcc,o2.nomOcc
FROM Appartements AS a1
JOIN Occupants AS o1 USING(noApp)
JOIN Occupants AS o2 ON o1.nomImm=o2.nomImm
JOIN Appartements AS a2 ON o2.noApp=a2.noApp
WHERE a1.Superficie=a2.Superficie AND o1.nomOcc>o2.nomOcc
16. Qui n’habite pas un appartement géré par Ross ?
SELECT NomOcc
FROM Occupants
JOIN Immeubles USING(nomImm)
WHERE NomGerant<>'Ross'
17. Qui n’habite pas un appartement qu’il gère lui-même ?
SELECT NomOcc
FROM Occupants
JOIN Immeubles USING(nomImm)
WHERE NomGerant<>NomOcc
18. Quels sont les immeubles où personne n’a emménagé en 1996 ?
SELECT nomImm
FROM Immeubles
WHERE NomImm NOT IN (
SELECT DISTINCT nomImm
FROM Occupants
WHERE AnneeArrivee=1996
)
19. Quels sont les immeubles où tout le monde a emménagé en 1994 ?
SELECT nomImm
FROM Immeubles
WHERE NomImm NOT IN (
SELECT DISTINCT nomImm
FROM Occupants
WHERE AnneeArrivee<>1994
)
Nils Schaefer 3/7
Bases de données
Exercice 2
FILM (CodeFilm, TitreFilm, Annee, Duree, Resume, #CodeGenre)
GENRE (CodeGenre, IntGenre)
ACTEUR (CodeActeur, NomActeur, PrenomActeur)
JOUER_UN_ROLE (#CodeFilm, #CodeActeur)
SUPPORT (CodeSupport, IntSupport)
FILM_SUPPORT (#CodeFilm, #CodeSupport)
EMPRUNTEUR (CodePers, NomPers, PrenomPers, AdrPers, TelPers)
EMPRUNT (#CodeFilm, #CodePers, #DatePret, DateRetour)
Ecrivez les requêtes suivantes en langage SQL :
1. Liste des films et de leurs acteurs (champs à afficher : TitreFilm, NomActeur, PrenomActeur et IntSupport)
SELECT TitreFilm,NomActeur,PrenomActeur,IntSupport
FROM Film
JOIN Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
JOIN Film_Support USING(CodeFilm)
JOIN Support USING(CodeSupport)
2. Liste des films et de leurs acteurs (champs à afficher : TitreFilm, NomActeur, PrenomActeur, IntSupport et
IntGenre)
SELECT TitreFilm,NomActeur,PrenomActeur,IntSupport,IntGenre
FROM Film
JOIN Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
JOIN Film_Support USING(CodeFilm)
JOIN Support USING(CodeSupport)
JOIN Genre USING(CodeGenre)
3. Liste des films prêtés (sortis de la vidéothèque) (champ à afficher : TitreFilm)
SELECT TitreFilm
FROM Emprunt
JOIN Film USING(CodeFilm)
WHERE DateRetour IS NULL
4. Liste des films dans lesquels joue Sylvester Stallone (champs à afficher : TitreFilm, Annee, Duree et
IntGenre)
SELECT TitreFilm,Annee,Duree,IntGenre
FROM Film
JOIN Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
JOIN Genre USING(Codegenre)
WHERE NomActeur='Stallone' AND PrenomActeur='Sylvester'
5. Liste des films dans lesquels jouent Gérard Depardieu et Christian Clavier (champs à afficher : TitreFilm,
Annee, Duree et IntGenre)
SELECT TitreFilm,Annee,Duree,IntGenre
FROM (
SELECT Film.*
FROM Film
JOIN Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
WHERE NomActeur='Clavier' AND PrenomActeur='Christian'
Nils Schaefer 4/7
Bases de données
) A Film_Clavier
JOIN Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
JOIN Genre USING(Codegenre)
WHERE NomActeur='Depardieu' AND PrenomActeur='Gérard'
6. Liste des films dans lesquels joue Gérard Depardieu ou Christian Clavier (champs à afficher : TitreFilm,
Annee, Duree et IntGenre)
SELECT TitreFilm,Annee,Duree,IntGenre
FROM Film
JOIN Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
JOIN Genre USING(Codegenre)
WHERE (NomActeur='Depardieu' AND PrenomActeur='Gérard')
OR (NomActeur='Clavier' AND PrenomActeur='Christian')
7. Liste des personnes ayant déjà au moins une fois emprunté « Rambo », « Astérix et Obélix contre César
» ou « The Faculty » (champs à afficher : NomPers, PrenomPers, AdrPers et TelPers)
SELECT DISTINCT NomPers,PrenomPers,AdressePers,TelPers
FROM Films
JOIN Emprunt USING(CodeFilm)
JOIN Emprunteur USING(CodePers)
WHERE TitreFilm='Rambo' OR TitreFilm'Asterix' OR TitreFilm='The Faculty'
8. Liste des films qui ont déjà été empruntés par tous les emprunteurs (champ à afficher : TitreFilm)
SELECT TitreFilm
FROM Emprunt
JOIN Films USING(CodeFilm)
GROUP BY TitreFilm
HAVING COUNT(DISTINCT CodePers)=(
SELECT COUNT(*) FROM Emprunteur
)
9. Liste des films qui n’ont jamais été empruntés (champ à afficher : TitreFilm)
SELECT TitreFilm
FROM Film
WHERE CodeFilm NOT IN (
SELCT DISTINCT CodeFilm FROM Emprunt
)
10. Liste de tous les acteurs et des codes films dans lesquels ils jouent (champ à afficher : NomActeur,
PrenomActeur et CodeFilm)
SELECT CodeFilm,NomActeur,PrenomActeur
FROM Jouer_un_role USING(CodeFilm)
JOIN Acteur USING(CodeActeur)
Exercice 3
Soit le modèle relationnel suivant relatif à la gestion des notes annuelles d'une promotion d'étudiants :
ETUDIANT(N°Etudiant, Nom, Prénom)
MATIERE(CodeMat, LibelléMat, CoeffMat)
EVALUER(N°Etudiant*, CodeMat*, Date, Note)
Réalisez les requêtes SQL suivantes…
Nils Schaefer 5/7
1 / 7 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !