Professional Documents
Culture Documents
Correction Examen BD s1 19 - 20
Correction Examen BD s1 19 - 20
Correction Examen BD s1 19 - 20
Dans la relation livre, pour chaque livre on a un nombre d’exemplaire (le champ nb_livre_total) après
chaque opération d’emprunt ce nombre sera diminué de 1 pour indiquer le nombre d’exemplaire encore
disponibles dans la bibliothèque (le champ nb_livre_disponible), lorsqu’un livre est retourné (on saisit la
date retour relative à l’opération d’emprunt dans la table emprunter) le nombre d’exemplaire encore
disponibles sera augmenté de 1.
Les champs soulignés présentent des clés primaires et ceux précédés par un # présentent des clés
étrangères.
Travail à faire
Partie I
1. Créer les tables (abonnee, livre, emprunter). (3Pts)
create table abonnee
(
num_abonnee number(5),
nom varchar2(30),
prenom varchar2(30),
email varchar2(30),
type_abonnee varchar2(30),
constraint pk_abonnee primary key (num_abonnee),
constraint ch_abonnee_type check (type_abonnee in('etudiant','enseignant'))
);
6. Supprimer tous les emprunts effectués en 2018 (date_ retour en 2018). (1Pt)
Delete from emprunter where date_ retour >= ‘01/01/2018’ and date_ retour <= ‘31/12/2018’ ;
Ou bien
Delete from emprunter where date_ retour between ‘01/01/2018’ and ‘31/12/2018’;
7. Supprimer tous les emprunts achevés (date_ retour non vide). (0,5Pt)
Delete from emprunter where date_ retour is not NULL ;
Partie II
1. Afficher le nom, le prénom des abonnées qui ont emprunté le livre dont le cote est ‘C_433’ plus que
dix fois (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And cote = ‘C_433’
Group by a.num_abonnee, nom, prenom
Having count(*) > 10;
2. Afficher les cotes des livres qui ont été empruntés plus que dix fois par l’abonné numéro 146 (2Pts).
Select cote
From emprunter e
Where num_abonnee = 146
Group by cote
Having count(*) > 10;
3. Afficher nom et le prénom des abonnées (étudiants) qui ont effectué des retards (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And type_abonnee = 'etudiant'
And date_retour is NULL
And sysdate > date_emprunt +3 ;
4. Afficher nom et prénom des abonnées (enseignants) qui ont effectué des retards (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And type_abonnee = 'enseignant'
And date_retour is NULL
And sysdate > date_emprunt +7 ;
5. Afficher nom et prénom des abonnées (enseignants) qui ont emprunté tous les livres (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And type_abonnee = 'enseignant'
Group by a.num_abonnee , nom, prenom
Having count(distinct cote) = (select count(*) from livre);
NB : Un abonné est en retard si la date du jour (sysdate) est supérieure à la date d’emprunt plus la durée
d’emprunt et le champ date retour est encore vide (NULL).
Bon Travail