Le palmarès des livres — et ses absents
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 16 — SQL : jointures, agrégation et requêtes imbriquées
Énoncé
Établir le nombre d'emprunts pour chaque livre (titre et effectif d'emprunts), trié du plus emprunté au moins emprunté. Expliquer quels livres n'apparaissent pas dans ce tableau et proposer une méthode pour les recenser.
Corrigé
SELECT titre, COUNT(*) AS nb
FROM emprunt JOIN livre ON emprunt.id_livre = livre.id_livre
GROUP BY livre.id_livre, titre
ORDER BY nb DESC, titre;
Résultat :
Guerre et paix | 2
Orgueil et préjugés | 2
Vingt mille lieues sous les mers | 2
Anna Karénine | 1
De la Terre à la Lune | 1
Le Blé en herbe | 1
Michel Strogoff | 1
Le tableau obtenu comporte seulement 7 lignes alors que la base contient 8 livres. Le livre Les Vrilles de la vigne, n'ayant jamais été emprunté, ne possède aucune ligne dans la table emprunt. La jointure interne l'exclut donc totalement, masquant le fait qu'il a été emprunté 0 fois. Pour recenser les livres absents, on peut exécuter une requête d'exclusion en utilisant l'opérateur ensembliste EXCEPT :
SELECT id_livre FROM livre
EXCEPT
SELECT id_livre FROM emprunt;
Dans un rapport d'analyse de données, il convient de présenter les deux requêtes afin de ne pas masquer les éléments à effectif nul.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.