SQL HAVING est une condition qui peut être appliquée à des entrées déjà re­grou­pées. Elle fonc­tionne avec des fonctions d’agré­ga­tion et est utilisée pour res­treindre les ensembles de résultats.

Qu’est-ce que SQL HAVING ?

En plus du WHERE bien connu, il existe dans le Struc­tu­red Query Language (SQL) une autre condition qui est souvent utilisée. SQL HAVING a été in­tro­duite pour filtrer les données en fonction de critères spé­ci­fiques après les avoir re­grou­pées. Cette condition est appliquée avec la commande SQL SELECT et l’ins­truc­tion SQL GROUP BY. Alors que cette dernière regroupe les résultats, SQL HAVING limite cet ensemble de résultats à l’aide de dif­fé­rentes fonctions d’agré­ga­tion. Cette condition a été in­tro­duite parce que WHERE ne peut pas interagir avec des fonctions d’agré­ga­tion comme SQL AVG(), SQL COUNT(), MAX(), MIN() et SUM(). SQL HAVING est utilisé après les ins­truc­tions WHERE (si elles existent) et GROUP BY, mais avant ORDER BY.

Serveurs virtuels (VPS)
VPS éco­no­miques sur serveurs Dell En­ter­prise
  • 1 Gbit/s de bande passante et trafic illimité
  • Dis­po­ni­bi­lité de 99,99 % et cer­ti­fi­ca­tion ISO
  • As­sis­tance 24/7 primée pour sa qualité et con­seil­ler personnel

Syntaxe et fonc­tion­ne­ment

Pour com­prendre le fonc­tion­ne­ment et l’utilité de SQL HAVING, examinons sa syntaxe. La voici :

SELECT nom_de_la_colonne(n)
FROM nom_du_tableau
WHERE condition
GROUP BY nom_de_la_colonne(n)
HAVING condition
ORDER BY nom_de_la_colonne(n);
sql

Souvent, une fonction d’agré­ga­tion est appliquée à une ou plusieurs colonnes. Ensuite, pour la lo­ca­li­sa­tion, on indique le nom de la table. La condition WHERE est fa­cul­ta­tive. GROUP BY rassemble des valeurs iden­tiques en groupes qui sont filtrées de manière encore plus précise avec HAVING et placés dans l’ordre souhaité avec ORDER BY.

Exemple de condition

La manière la plus simple d’illustrer le fonc­tion­ne­ment de SQL HAVING est de prendre un exemple simple. Pour cela, nous créons un tableau appelé « Liste de clients ». Celui-ci contient les colonnes « Numéro de client », « Nom », « Ville » et « Articles » :

Numéro de client Nom Em­pla­ce­ment Articles
1427 Berron Paris 13
1377 Froissy Stras­bourg 9
1212 Sulis Stras­bourg 15
1431 Verdon Lille 22
1118 Paré Paris 10

Nous utilisons main­te­nant SQL HAVING pour savoir combien de clients et clientes de Stras­bourg ont commandé dix articles ou plus. Pour cela, nous utilisons le code suivant et indiquons le nombre à l’aide d’un alias SQL comme « Nom­bre­Com­mandes » :

SELECT Ville, COUNT(Ville) AS NombreCommandes
FROM Liste_de_clients
WHERE Ville = 'Strasbourg'
GROUP BY Ville, Articles
HAVING Articles > 10;
sql

La sortie cor­res­pon­dante se présente comme suit :

Ville Nom­bre­Com­mandes
Stras­bourg 1

La condition en com­bi­nai­son avec INNER JOIN

Vous pouvez également combiner SQL HAVING avec le mot-clé « INNER JOIN ». Pour illustrer cela, créons une deuxième table nommée « Article_01 », qui en­re­gistre le nombre d’oc­cur­rences et la date de commande pour chaque article. Cette table contient les colonnes suivantes : numéro de commande, numéro de client, quantité et date de commande. Voici un exemple de sa structure :

Numéro de commande Numéro de client Oc­cur­rences Date
00283 1427 4 2024-01-15
00284 1211 7 2024-01-19
00285 1275 15 2024-01-29
00286 1431 10 2024-02-01
00287 1427 9 2024-02-05

Main­te­nant, nous pouvons demander au système de nous montrer tous les clients qui ont passé plus d’une commande. Le code approprié est le suivant :

SELECT Liste de clients.Nom, COUNT(Article_01.Numéro de commande) AS NombreCommandes
FROM (Article_01
INNER JOIN Liste de clients ON Article_01.Numéro de client = Liste de clients.Numéro de client)
GROUP BY Nom
HAVING COUNT(Article_01.Numéro de commande) > 1;
sql

Voici la sortie que nous obtenons alors :

Nom Nom­bre­Com­mandes
Berron 2

Al­ter­na­tive à SQL HAVING

Une al­ter­na­tive à SQL HAVING est WHERE. Les deux options ne peuvent toutefois pas être utilisées exac­te­ment de la même manière. WHERE est utilisé pour des entrées in­di­vi­duelles et peut être combiné avec DELETE ou UPDATE en plus de SELECT. HAVING, en revanche, est ex­clu­si­ve­ment prévue pour les entrées groupées et n’est com­pa­tible qu’avec SELECT. WHERE est utilisé avant GROUP BY, tandis que HAVING s’utilise après. De plus, seul SQL HAVING peut tra­vail­ler avec des fonctions d’agré­ga­tion.

Conseil

Un serveur par­fai­te­ment adapté à vos besoins : avec le serveur d’hé­ber­ge­ment SQL de IONOS, vous choi­sis­sez entre MSSQL, MySQL et MariaDB et profitez d’une solide ar­chi­tec­ture de sécurité, d’ex­cel­lentes per­for­mances et d’un conseil per­son­na­lisé à tout moment.

Aller au menu principal