Exercice 2 [Requêtes SQL et algébre relationnelle (10-12 points)]
On considère une base de données de livres d’occasion proposés à la vente par différents
vendeurs. Les clefs primaires sont précédées d’une étoile (*) et les clefs étrangères sont suivies
d’un astérisque (#).
•Vendeur(*id_vend, nom_vend, ville, Chronopost, point_relais, re-
trait_magasin) : liste des différents vendeurs, avec leur localisation géographique,
ainsi que leur politique de facturation en matière de frais de port (identifiant ; nom ;
ville ; frais d’envoi par Chronopost en euros ; frais d’envoi en point relais en euros ;
possibilité de retrait gratuit en magasin : oui ou non).
•Livre(*ISBN, titre, auteur, editeur, format, nb_pages) : liste des livres (iden-
tifiant ISBN ; titre ; auteur ; éditeur ; format, au choix : poche, broché, relié ; nombre
de pages).
•Exemplaire(*id_ex, *ISBN#, *id_vend#, état, prix) : liste de chacun des
exemplaires de livres proposés à la vente par les différents vendeurs (la clef primaire est
composite et est formée à partir d’un identifiant d’exemplaire, ainsi que d’un identifiant
de livre et d’un identifiant de vendeur ; l’attribut état consiste en une note de 1, 2 ou
3 qui représente respectivement un état “comme neuf”, “bon” ou “correct” ; le prix
correspond à une somme ronde en euros). Le premier attribut correspond au fait qu’un
même vendeur peut proposer à la vente plusieurs exemplaires d’un même ouvrage.
Lorsqu’il vous est demandé dans la question 2 de donner une requête en algèbre relation-
nelle, pour plus de lisibilité, vous pouvez écrire la requête en plusieurs étapes, par exemple :
A=πval(R)./ S
B=σatt=5(T∪R)
reponse =A∩B
Par ailleurs, si vous avez besoin de distinguer deux utilisations d’une même table, vous pouvez
utiliser un numéro pour distinguer les deux utilisations de la table. Voici un exemple, dans
lequel la table T est utilisée deux fois :
C=σatt=5(T1./T1.val<>T2.val T2)
A défaut de répondre à la question 2 avec des requêtes en algèbre relationnelle,
vous pouvez proposer des requêtes SQL (et vice versa, lorsque cela est possible,
i.e., pour les requêtes de la question 1 qui ne font pas appel à l’aggrégation).
Sachez néanmoins que dans ce cas, seule la moitié des points vous sera comptée.
1. Ecrivez les requêtes SQL correspondant aux questions suivantes. Un bonus sera accordé
si vous prenez bien soin d’éviter les doublons.
(a) Les titres des livres dont le nombre de pages est supérieur à 1000 et qui sont proposés
pour moins de 15 euros par un vendeur acceptant le retrait gratuit en magasin.
Tableau résultat : titre, nom_vend, prix.
(b) Le nombre de livres différents (on compte un livre par ISBN) écrits par Asimov et
dont le titre contient le mot “Fondation”.
Tableau résultat : nombre.
2