informatique (tronc commun des prépas scientifiques) · Chapitre 16 · Exercice de TD
WHERE ou HAVING ? Les quatre combinaisons
SQL : jointures, agrégation et requêtes imbriquées · niveau 2
Énoncé
En exploitant les tables emprunt et usager, écrire les requêtes SQL renvoyant : (a) le nombre d'emprunts par usager ; (b) le nombre d'emprunts du mois d'octobre par usager ; (c) la liste des usagers ayant effectué au moins 2 emprunts au total ; (d) la liste des usagers ayant effectué au moins 2 emprunts durant le seul mois d'octobre. Distinguer le rôle des clauses WHERE et HAVING dans ces calculs.
Corrigé
-- (a) Nombre d'emprunts par usager
SELECT nom, COUNT(*) AS nb FROM emprunt
JOIN usager ON emprunt.id_usager = usager.id_usager
GROUP BY usager.id_usager, nom;
-- (b) Nombre d'emprunts d'octobre par usager (utilisation de WHERE)
SELECT nom, COUNT(*) AS nb FROM emprunt
JOIN usager ON emprunt.id_usager = usager.id_usager
WHERE jour >= '2025-10-01'
GROUP BY usager.id_usager, nom;
-- (c) Usagers ayant fait au moins 2 emprunts (utilisation de HAVING)
SELECT nom, COUNT(*) AS nb FROM emprunt
JOIN usager ON emprunt.id_usager = usager.id_usager
GROUP BY usager.id_usager, nom
HAVING COUNT(*) >= 2;
-- (d) Usagers ayant fait au moins 2 emprunts en octobre (WHERE + HAVING)
SELECT nom, COUNT(*) AS nb FROM emprunt
JOIN usager ON emprunt.id_usager = usager.id_usager
WHERE jour >= '2025-10-01'
GROUP BY usager.id_usager, nom
HAVING COUNT(*) >= 2;
WHEREagit sur les lignes de données individuelles, avant le regroupement. Dans la question (b), il filtre les emprunts pour ne retenir que ceux d'octobre. Un usager comme David, n'ayant aucun emprunt en octobre, voit ses lignes supprimées avant le calcul de l'agrégat.HAVINGintervient sur les groupes, après le regroupement et le calcul de l'agrégation. Dans la question (c), le calcul du nombre total d'emprunts est effectué pour tous les usagers, puis seuls ceux dont l'effectif est sont conservés.
Exercices semblables
- Le palmarès des livres — et ses absents 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é