Page 34 - DCG - SQL - 2025
P. 34
Exercice
CONTEXTE
Une maison d’édition numérique gère un catalogue de livres, des auteurs, des lecteurs et des
téléchargements. Certains auteurs sont peu lus, certains livres ne sont jamais téléchargés, et certains
lecteurs n’ont encore rien acheté. L’équipe éditoriale souhaite croiser ces données pour détecter les
absences ou les exclusions.
SCHÉMA RELATIONNEL
AUTEUR (NoAuteur, NomAuteur)
LIVRE (RefLivre, Titre, Categorie, #NoAuteur)
LECTEUR (NoLecteur, NomLecteur)
TELECHARGEMENT (#NoLecteur, #RefLivre, DateTelechargement)
AVIS (#NoLecteur, #RefLivre, Note, Commentaire)
REQUÊTES AVEC IN (avec sous-requête)
1. Afficher les noms des lecteurs ayant téléchargé au moins un livre.
2. Afficher les titres des livres qui ont reçu au moins un avis.
3. Afficher les noms des auteurs dont au moins un livre a été téléchargé.
REQUÊTES COMPARATIVES NOT IN / LEFT JOIN (5 requêtes)
Instruction : Formuler la requête en utilisant d’abord NOT IN, puis la réécrire avec LEFT JOIN + IS NULL.
4. Afficher les noms des lecteurs n’ayant jamais téléchargé de livre.
5. Afficher les titres des livres n’ayant reçu aucun avis.
6. Afficher les noms des auteurs dont aucun livre n’a été téléchargé.
7. Afficher les livres jamais téléchargés par le lecteur numéro 5.
8. Afficher les lecteurs n’ayant jamais noté le livre "Le pouvoir des nombres".
MÉMO – Comment repérer les cas où NOT IN ou LEFT JOIN sont nécessaires ?
• La requête contient une négation implicite : n’ayant jamais…, sans…, n’ayant pas fait…
• On cherche ce qui est absent d’une relation, malgré une possibilité logique de lien
• Si la phrase peut se lire comme : “telle entité n’est pas dans la liste de celles qui ont fait telle action”,
vous êtes probablement dans un cas de NOT IN ou LEFT JOIN IS NULL
29