Maison >base de données >tutoriel mysql >OÙ ou HAVING : quand devez-vous utiliser chaque clause pour rechercher des données agrégées ?
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!