Junior
Quelle est la différence entre les constructions WHERE et HAVING en SQL?
sobes.tech IA
Réponse de l'IA
WHERE filtre les lignes avant le regroupement (GROUP BY), influençant sur quelles lignes participeront aux fonctions d'agrégation. HAVING filtre les groupes après le regroupement, en se basant sur les résultats des fonctions d'agrégation.
| Caractéristique | WHERE | HAVING |
|---|---|---|
| Application | Sur des lignes individuelles | Sur des groupes de lignes |
| Moment de traitement | Avant GROUP BY | Après GROUP BY |
| Utilisation | Avec des champs de la table, mais sans fonctions d'agrégation | Avec des résultats de fonctions d'agrégation ou des champs de GROUP BY |
Exemple d'utilisation de WHERE:
SELECT nom_produit, prix
FROM produits
WHERE category_id = 1; -- Filtre les lignes **avant** le regroupement (si cela avait été fait)
Exemple d'utilisation de HAVING:
SELECT category_id, COUNT(*) AS total_produits
FROM produits
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtre les groupes **après** avoir compté le nombre total de produits
Exemple d'utilisation combinée:
SELECT category_id, AVG(prix) AS prix_moyen
FROM produits
WHERE stock > 0 -- Filtre uniquement les produits en stock **avant** le regroupement
GROUP BY category_id
HAVING AVG(prix) < 100; -- Filtre les groupes avec un prix moyen inférieur à 100 **après** le regroupement et le calcul de la moyenne