informatique (tronc commun des prépas scientifiques) · Chapitre 16 · Exercice de TD
Le palmarès des livres — et ses absents
SQL : jointures, agrégation et requêtes imbriquées · niveau 2
É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.
Exercices semblables
WHEREouHAVING? Les quatre combinaisons corrigé- Autojointures corrigé
- Le superlatif par groupe — un vrai piège corrigé
- Le palmarès des villes corrigé
- La moyenne des moyennes n'est pas la moyenne corrigé