Gestion de bibliothèques
[30 min]
Soit la base relationnelle suivante permettant de gérer des bibliothèques.
Livre (#LivreID, Titre, NomEditeur=>Editeur) avec Titre clé
Livre_Auteur (#LivreID=>Livre, #NomAuteur)
Editeur (#NomEditeur, Adresse, Telephone)
Livre_Exemplaires (#LivreID=>Livre, #BiblioID=>Bibliotheque, NbExemplaires)
Bibliotheque (#BiblioID, Nom, Adresse) avec Nom clé
Livre_Emprunte (#LivreID=>livre, #BiblioID=>Bibliotheque, #NumCard=>Emprunteur, DateEmprunt, DateRetour)
Emprunteur (#NumCard, Nom, Adresse, Téléphone)
Question
Écrivez en algèbre relationnelle la requête permettant de renvoyer le nombre d'exemplaires du livre intitulé "Les cinq disciplines" qui est détenu par la bibliothèque qui a comme nom "Paris".
Solution
R1=restriction(livre,titre="les cinq disciplines")
R2=jointure(R1,Livre_ Exemplaires, R1.LivreID=Livre_ Exemplaires.livreID)
R3=jointure(R2,biblioteque, R2.biblioID=biblioteque.biblioID)
R4=restriction(R3.nom="paris")
R5=Projection(R4,NbExemplaires)
Question
Écrivez en en algèbre relationnelle la requête permettant de renvoyer pour chaque livre écrit par "Douglas Kennedy" le nombre d'exemplaires détenus par la bibliothèque "Paris"
Solution
R1=jointure(Livre_Auteur,Livre_ Exemplaires, Livre_Auteur.LivreID=Livre_ Exemplaires.livreID)
R2=jointure(R1,biblioteque, R1.biblioID=biblioteque.biblioID)
R3=restriction(R2,R2.nom="paris" and R2.NomAuteur="Douglas Kennedy")
R4=Projection(R4,NbExemplaires)
Question
Écrivez en SQL la requête qui permet de renvoyer le titre du livre, le nom de l'emprunteur, et l'adresse de l'emprunteur pour chaque livre qui est prêté par la bibliothèque "Paris" et dont la date de retour est aujourd'hui.
Indice
Utiliser une fonction today()
pour renvoyer la date du jour (par exemple, le 15 mai 2013, today()='2013/05/14'
).
Solution
SELECT L.titre, E.nom, E.adresse
FROM livre l, Livre_Emprunte LE, Emprenteur E, Biblioteque B
WHERE l.LivreID=LE.LivreID
AND LE.biblioID=B.biblioID
AND LE.NumCard=E.NumCard
AND LE.DateRetour=today()
AND B.nom="Paris"
Question
Écrivez en SQL la requête qui permet de récupérer les noms de tous les emprunteurs qui ont rendu leurs livres empruntés.
Solution
Deux hypothèses sont acceptées :
Soit on considère que DateRetour est la date ou l'emprunteur doit rendre le livre
Soit on considère que l'emprunteur qui a rendu le livre est celui qui n'a pas de valeur
SELECT E.nom
FROM Emprunteur E,Livre_Emprunte LE
WHERE LE.NumCard=E.NumCard
AND LE.DateRetour < today();
SELECT Nom
FROM Emprunteur
WHERE NumCard NOT IN
(SELECT NumCard FROM Livre_Emprunte)
Question
Écrivez en SQL la requête permettant de récupérer les noms, adresses et nombre de livres empruntés pour chaque emprunteur qui a emprunté plus que 5 livres.
Solution
SELECT E.Nom, E.Adresse, count(le.livreID)
FROM Livre_Emprunte LE, Emprunteur E
WHERE LE.NumCard=E.NumCard
GROUP BY E.Nom, E.Adresse
HAVING COUNT(LE.livreID) > 5