Maison >base de données >tutoriel mysql >OÙ ou HAVING : quand devez-vous utiliser chaque clause pour rechercher des données agrégées ?

OÙ ou HAVING : quand devez-vous utiliser chaque clause pour rechercher des données agrégées ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-21 09:41:07913parcourir

WHERE vs. HAVING: When Should You Use Each Clause to Find Aggregated Data?

SQL : HAVING vs. WHERE – Filtrage des données agrégées

Cet article démontre la principale différence entre les clauses WHERE et HAVING dans SQL, en particulier lorsque vous travaillez avec des données agrégées. Nous utiliserons l'exemple de la recherche du conférencier avec le plus de spécialisations. Une clause WHERE seule est insuffisante pour cette tâche ; une clause HAVING est nécessaire.

Comprendre la différence

La clause WHERE filtre les lignes individuelles avant que le regroupement se produise. Il applique des conditions à des enregistrements individuels dans une table. À l'inverse, la clause HAVING filtre le regroupement après, opérant sur des fonctions d'agrégation telles que COUNT, SUM, AVG et MIN. Ceci est essentiel lors du filtrage basé sur les résultats de l'agrégation, comme dans notre exemple de spécialisation de professeur.

Meilleures pratiques

Pour plus de clarté et d'efficacité, la règle générale est d'utiliser WHERE avant GROUP BY et HAVING après GROUP BY. Cette approche simplifie la construction des requêtes et améliore la lisibilité.

Requête optimisée

La requête suivante utilise une jointure ANSI et une clause HAVING pour identifier efficacement le(s) professeur(s) avec le nombre maximum de spécialisations :

<code class="language-sql">SELECT  L.LectID, Fname, Lname
FROM Lecturers L
JOIN Lecturers_Specialization S ON L.LectID = S.LectID
GROUP BY L.LectID, Fname, Lname
HAVING COUNT(S.Expertise) >= ALL
(SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>

Cette requête révisée élimine le besoin d'une clause WHERE comme condition de jointure thêta, conduisant à une requête plus rationalisée et plus efficace.

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!

Déclaration:
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