Adloun

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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre