Vous êtes sur la page 1sur 2

Université de Carthage – ENIB CSI – GI2-GM2-GC1

TD SQL, Correction

On considère la base de données « videoClub » permettant de gérer les films, les clients, les emprunts…
d’un vidéo-club et dont le schéma relationnel est le suivant :

FORMULE ( NuFormule , Nom, PrixCotisation, PrixVideo)


ABONNE ( NuAbonne , Nom, Prenom, Adresse, NuFormule , DateAbonnement, DateCotisation)
VIDEO ( CodeVideo, Titre, Realisateur, DateSortie)
EXEMPLAIRE ( CodeVideo , NuExemplaire, Format)
EMPRUNT ( NuAbonne, CodeVideo, NuExemplaire , DateLocation, DateRendu)
ASSOCIATION ( CodeVideo, CodeVideoAssocie )
Utiliser le langage SQL pour répondre aux requêtes suivantes :
1. Afficher la liste des abonnés avec le nom de leur formule.

SELECT ABONNE.Nom, ABONNE.Prenom, FORMULE.Nom


FROM ABONNE, FORMULE
WHERE ABONNE.NuFormule=FORMULE.NuFormule;

2. Afficher pour chaque abonné le nombre de location qu'il a effectué.

SELECT ABONNE.Nom, ABONNE.Prenom, count(*)


FROM ABONNE, EMPRUNT
WHERE ABONNE.NuAbonne = EMPRUNT.NuAbonne
GROUP BY ABONNE.Nom, ABONNE.Prenom,ABONNE. NuAbonne;

3. Afficher la somme du prix des locations (hors abonnement) pour chaque abonné.

SELECT ABONNE.Nom, ABONNE.Prenom, sum(prixvideo)


FROM ABONNE, EMPRUNT,FORMULE
WHERE ABONNE.NuAbonne = EMPRUNT.NuAbonne
AND ABONNE.nuFormule=FORMULE.nuFormule
GROUP BY ABONNE.Nom, ABONNE.Prenom,ABONNE. NuAbonne;

4. Afficher les exemplaires non rendus ainsi que le nom de l'emprunteur.

SELECT Titre, NuExemplaire, ABONNE.nom


FROM EMPRUNT, ABONNE, VIDEO
WHERE EMPRUNT.codeVideo=VIDEO.codevideo
AND EMPRUNT.nuabonne=ABONNE.nuabonne
AND daterendu IS NULL;

5. Afficher les titres et format des films disponibles (sans doublons)

SELECT DISTINCT Titre, Format


FROM EXEMPLAIRE, VIDEO
WHERE EXEMPLAIRE.codevideo=VIDEO.codevideo
AND (EXEMPLAIRE.codevideo, EXEMPLAIRE.nuexemplaire) NOT IN (
SELECT Codevideo, NuExemplaire
FROM EMPRUNT
WHERE daterendu IS NULL);

SH – CTD SQL Année 20 – 21 Page 1 / 2


Université de Carthage – ENIB CSI – GI2-GM2-GC1

6. Afficher la liste des films jamais empruntés.

SELECT Titre
From VIDEO
WHERE codevideo NOT IN (
SELECT codevideo
FROM EMPRUNT);

7. Afficher la liste des films empruntés au moins 3 fois.

SELECT Titre
FROM VIDEO,EMPRUNT
WHERE VIDEO.codevideo=EMPRUNT.codevideo
GROUP BY VIDEO.codevideo,Titre
HAVING count(*) >= 3;

8. Afficher la liste des films empruntés par au moins 3 abonnés différents.

SELECT Titre
FROM VIDEO
WHERE codevideo IN ( SELECT codevideo
FROM (SELECT DISTINCT codevideo, nuabonne FROM EMPRUNT)
GROUP BY codevideo
HAVING count(*) >= 3);

9. Afficher la liste des films empruntés au moins 3 fois par un même abonné.

SELECT DISTINCT Titre


FROM VIDEO,EMPRUNT
WHERE VIDEO.codevideo=EMPRUNT.codevideo
GROUP BY Titre,VIDEO.codevideo, nuabonne
HAVING count(*) >= 3;

10. Conseiller Berthe Berurier. Ne pas lui proposer un film qu'elle a déjà loué.

SELECT Titre
FROM VIDEO
WHERE codevideo IN (
SELECT codevideoassocie
FROM association
WHERE codevideo IN ( SELECT codevideo
FROM EMPRUNT, ABONNE
WHERE Abonne.nom='BERURIER'
AND Abonne.prenom='Berthe'
AND Abonne.nuabonne=emprunt.nuabonne) )
AND Codevideo NOT IN ( SELECT codevideo
FROM EMPRUNT, ABONNE
WHERE Abonne.nom='BERURIER'
AND Abonne.prenom='Berthe'
AND Abonne.nuabonne=emprunt.nuabonne);

11. Afficher la liste des films qui ne sont conseillés dans aucun cas.

SELECT Titre
FROM video
WHERE codevideo NOT IN ( SELECT codevideoassocie FROM ASSOCIATION);

SH – CTD SQL Année 20 – 21 Page 2 / 2

Vous aimerez peut-être aussi