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.
HAVING
est 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;