Différence entre WHERE et HAVING en SQL
Les clauses WHERE et HAVING sont utilisées pour filtrer les données dans les requêtes SQL, mais elles répondent à des objectifs différents et sont appliquées à différentes étapes de l'exécution des requêtes. Voici une comparaison détaillée :
1. Objectif
-
Clause OÙ :
- Filtre les lignes avant qu'un regroupement ne soit effectué.
- Utilisé pour spécifier des conditions sur des lignes individuelles.
-
Clause HAVING :
- Filtre les données regroupées après l'application de la clause GROUP BY.
- Généralement utilisé avec des fonctions d'agrégation telles que SUM(), COUNT(), AVG(), etc.
2. Candidature
-
OÙ :
- Ne peut pas être utilisé avec des fonctions d'agrégation (par exemple, SUM, COUNT).
- Exemple :
SELECT * FROM employees WHERE salary > 50000;
Copier après la connexion
Copier après la connexion
- Ceci filtre les salariés dont le salaire est supérieur à 50 000.
-
AVOIR :
- Spécifiquement utilisé pour filtrer les groupes créés par GROUP BY.
- Peut utiliser des fonctions d'agrégation pour les conditions.
- Exemple :
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Copier après la connexion
Copier après la connexion
- Ceci filtre les départements où le salaire moyen dépasse 60 000.
3. Ordre d'exécution
-
OÙ :
- Appliqué au début de la requête, avant que les lignes ne soient regroupées.
- Affecte les lignes incluses dans le regroupement.
-
AVOIR :
- Appliqué après que GROUP BY a créé des groupes.
- Filtre le résultat agrégé des groupes.
4. Différences clés
Aspect |
Clause OÙ |
Clause HAVING |
ête>
Aspect |
WHERE Clause |
HAVING Clause |
Purpose |
Filters rows before grouping. |
Filters aggregated groups. |
Use with Aggregates |
Cannot use aggregate functions. |
Can use aggregate functions. |
Execution Order |
Applied before GROUP BY. |
Applied after GROUP BY. |
Scope |
Operates on individual rows. |
Operates on grouped data. |
Objectif |
Filtre les lignes avant de les regrouper. |
Filtre les groupes agrégés. |
Utiliser avec des agrégats |
Impossible d'utiliser les fonctions d'agrégation. |
Peut utiliser des fonctions d'agrégation. |
Ordre d'exécution |
Appliqué avant GROUP BY. |
Appliqué après GROUP BY. |
Portée |
Fonctionne sur des lignes individuelles. |
Fonctionne sur des données groupées. |
Exemples
En utilisant OÙ :
SELECT * FROM employees WHERE salary > 50000;
Copier après la connexion
Copier après la connexion
- Filtre les lignes individuelles où le salaire est supérieur à 50 000.
Utiliser AVOIR :
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Copier après la connexion
Copier après la connexion
- Filtre les départements où le nombre d'employés dépasse 10.
Exemple combiné :
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 50000;
Copier après la connexion
-
WHERE : filtre les lignes où le salaire est supérieur à 30 000.
-
HAVING : Filtre les groupes dont le salaire moyen dépasse 50 000.
Quand utiliser WHERE vs HAVING
- Utilisez WHERE pour filtrer les lignes en fonction de conditions simples (non agrégées).
- Utilisez HAVING pour filtrer les groupes après avoir appliqué des fonctions GROUP BY ou d'agrégation.
Conclusion
La clause WHERE se concentre sur le filtrage des lignes individuelles avant tout regroupement, tandis que la clause HAVING traite du filtrage des données agrégées après le regroupement. Comprendre ces distinctions est crucial pour écrire des requêtes SQL efficaces qui gèrent à la fois le filtrage au niveau des lignes et au niveau du groupe.
Bonjour, je m'appelle Abhay Singh Kathayat !
Je suis un développeur full-stack avec une expertise dans les technologies front-end et back-end. Je travaille avec une variété de langages et de frameworks de programmation pour créer des applications efficaces, évolutives et conviviales.
N'hésitez pas à me contacter à mon e-mail professionnel : kaashshorts28@gmail.com.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!