informatique (tronc commun des prépas scientifiques) · Chapitre 16 · Exercice de TD
Autojointures
SQL : jointures, agrégation et requêtes imbriquées · niveau 2
Énoncé
Rédiger les requêtes SQL retournant : (a) les paires de livres différents écrits par un même auteur ; (b) les paires d'usagers habitant la même ville ; (c) les couples de livres parus la même année mais écrits par des auteurs différents.
Corrigé
-- (a) Paires de livres d'un même auteur
SELECT l1.titre, l2.titre FROM livre AS l1
JOIN livre AS l2 ON l1.id_auteur = l2.id_auteur
WHERE l1.id_livre < l2.id_livre;
-- (b) Paires d'usagers habitant la même ville
SELECT u1.nom, u2.nom FROM usager AS u1
JOIN usager AS u2 ON u1.ville = u2.ville
WHERE u1.id_usager < u2.id_usager;
-- (c) Livres parus la même année mais écrits par des auteurs différents
SELECT l1.titre, l2.titre, l1.annee FROM livre AS l1
JOIN livre AS l2 ON l1.annee = l2.annee
WHERE l1.id_auteur <> l2.id_auteur AND l1.id_livre < l2.id_livre;
Dans chaque cas, la condition id1 < id2 évite de renvoyer l'association d'un élément avec lui-même et limite le résultat aux paires non ordonnées (excluant les doublons de permutation).
- (a) Renvoie 5 paires (3 chez Jules Verne, 1 chez Léon Tolstoï et 1 chez Colette).
- (b) Identifie les binômes Alice–Chloé (Lyon), Bruno–Emma (Paris) et David–Farid (Nantes).
- (c) Renvoie un résultat vide, indiquant qu'aucun livre d'auteurs distincts n'a été publié la même année dans cette base de données.