Maison > base de données > tutoriel mysql > Comprendre la différence entre WHERE et HAVING en SQL

Comprendre la différence entre WHERE et HAVING en SQL

Linda Hamilton
Libérer: 2024-12-23 00:03:08
original
507 Les gens l'ont consulté

Understanding the Difference Between WHERE and HAVING in SQL

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

  •  :

    • 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

  •  :

    • 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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal