Aller au contenu principal

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, ou MIN).

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 par GROUP BY.

La syntaxe de base est la suivante :

SELECT colonnes
FROM table
GROUP BY colonnes
HAVING condition;
attention

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


À quoi sert le mot clé `HAVING` en SQL ?


Quelle fonction `HAVING` peut-il filtrer ?


Quelle est la différence entre `WHERE` et `HAVING` ?



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

astuce

N'oubliez pas, la pratique est la clé pour maîtriser une nouvelle compétence.


Mission 1

MPD_bibliotheque.png

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

MPD_bibliotheque.png

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

MPD_bibliotheque.png

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

MPD_bibliotheque.png

Votre mission consiste à enregistrer l'emprunt du livre 'Le Petit Prince' par Marie Duval aujourd'hui.

astuce

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

MPD_bibliotheque.png

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;