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.
Une solution
Voici une requête pour afficher le titre des livres et leur date de prêt :
SELECT livres.titre, emprunts.datepret
FROM livres
JOIN emprunts ON livres.idlivre = emprunts.idlivre
Mission 2

Votre mission consiste à afficher l'ID du livre qui a pour titre 'Le Petit Prince'.
Une solution
SELECT idlivre FROM livres WHERE titre = 'Le Petit Prince';
Mission 3

Votre mission consiste à afficher l'ID de l'emprunteur 'Marie Duval'.
Une solution
SELECT idemprunteur FROM emprunteurs WHERE prenom = 'Marie' AND nom = '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() )
Une solution
INSERT INTO emprunts (idlivre, idemprunteur, datepret) 
VALUE (
  (SELECT idlivre FROM livres WHERE titre = 'Le Petit Prince'),
  (SELECT idemprunteur FROM emprunteurs WHERE prenom = 'Marie' AND nom = 'Duval'),
  DATE( NOW() )
);
Mission 5

Votre mission consiste à trouver les auteurs dont les livres ont été empruntés plus d'une fois.
Une solution
SELECT livres.titre, COUNT(emprunts.idlivre)
FROM livres
JOIN emprunts ON livres.idlivre = emprunts.idlivre
GROUP BY livres.titre
HAVING COUNT(emprunts.idlivre) > 1;