Adloun

WHERE ou HAVING ? Les quatre combinaisons

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 16 — SQL : jointures, agrégation et requêtes imbriquées

É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;

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.