Le mot clé HAVING
Notions théoriques
Le mot clé HAVING est utilisé en SQL pour :
- spécifier une condition de filtrage
- qui s'applique aux résultats d'une fonction d'agrégation (
SUM,COUNT,AVG,MAX, ouMIN).
Il est souvent utilisé avec le mot clé GROUP BY, qui permet de regrouper les résultats d'une requête par une ou plusieurs colonnes.
HAVINGest alors utilisé pour filtrer les groupes créés parGROUP BY.
La syntaxe de base est la suivante :
SELECT colonnes
FROM table
GROUP BY colonnes
HAVING condition;
La condition spécifiée dans la clause HAVING s'applique aux résultats des fonctions d'agrégation,
et non aux valeurs individuelles des lignes de la table.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans ce TP, nous allons utiliser la base de données de la bibliothèque.
Télécharger le fichier 'cdi.sql' - Télécharger le MCD
N'oubliez pas, la pratique est la clé pour maîtriser une nouvelle compétence.
Mission 1

Votre mission consiste à afficher le titre des livres et leur date de prêt.
Mission 2

Votre mission consiste à afficher l'ID du livre qui a pour titre 'Le Petit Prince'.
Mission 3

Votre mission consiste à afficher l'ID de l'emprunteur 'Marie Duval'.
Mission 4

Votre mission consiste à enregistrer l'emprunt du livre 'Le Petit Prince' par Marie Duval aujourd'hui.
Voici la fonction qui permet d'obtenir la date d'aujourd'hui :
DATE( NOW() )
Plutôt que d'écrire INSERT INTO emprunts VALUES (3, 5, ...) avec des IDs codés en dur
(qui peuvent changer selon les environnements), utilisez des sous-requêtes :
(SELECT idlivre FROM livres WHERE titre = 'Le Petit Prince')
Cela rend le script plus robuste et réutilisable sur différentes bases de données.
Mission 5

Votre mission consiste à trouver les auteurs dont les livres ont été empruntés plus d'une fois.
WHERE s'applique avant le groupement : il filtre les lignes brutes de la table.
HAVING s'applique après le GROUP BY : il filtre les groupes résultants.
Erreur classique : WHERE COUNT(*) > 1 → erreur SQL.
Correct : HAVING COUNT(*) > 1.
Utilisez WHERE pour filtrer les données, HAVING pour filtrer les agrégats.
Une solution
Vous devez être connecté pour voir le contenu.