Définition :
- WHERE : filtre les lignes avant le regroupement (avant le GROUP BY).
- HAVING : filtre les groupes après le regroupement (après le GROUP BY).
Explication :
- WHERE agit sur les données brutes.
- HAVING agit sur les résultats agrégés, comme SUM, AVG, COUNT, etc.
Exemple SQL :
Table Ventes :
| id | vendeur | produit | montant |
| 1 | Claire | Livre | 30 |
| 2 | Marc | Stylo | 10 |
| 3 | Claire | Cahier | 15 |
| 4 | Julien | Livre | 25 |
| 5 | Marc | Cahier | 20 |
- Avec WHERE : filtrer les ventes supérieures à 20 €
SELECT * FROM Ventes WHERE montant > 20;
Résultat :
| id | vendeur | produit | montant |
| 1 | Claire | Livre | 30 |
| 4 | Julien | Livre | 25 |
- Avec HAVING : filtrer les vendeurs dont le total des ventes > 40 €
SELECT vendeur, SUM(montant) AS total_ventes FROM Ventes GROUP BY vendeur HAVING SUM(montant) > 40;
Résultat :
| vendeur | total_ventes |
| Claire | 45 |
Conclusion :
- WHERE → filtre les lignes individuelles.
- HAVING → filtre les groupes après aggregation.