Explication détaillée des différences entre les clauses HAVING et WHERE en SQL
En SQL, les mots-clés HAVING
et WHERE
sont utilisés pour filtrer les données, mais ils ont des fonctions différentes. Les deux sont utilisés pour la sélection conditionnelle, mais leur application dépend de la présence ou de l'absence de la clause GROUP BY
.
Clause WHERE
La clauseWHERE
est exécutée avant l'opération d'agrégation et sélectionne des lignes spécifiques en fonction de leurs valeurs. Par exemple, la requête suivante récupère les noms de tous les étudiants de plus de 20 ans :
<code class="language-sql">SELECT Name FROM Students WHERE Age > 20;</code>
Clause AVOIR
En revanche, la clause HAVING
est exécutée après application de la fonction d'agrégation. Il filtre les groupes de lignes en fonction de valeurs agrégées, ce qui est utile dans les scénarios où vous devez examiner les résultats agrégés.
Par exemple, la requête suivante récupère l'âge moyen des étudiants dans chaque ville, puis filtre les résultats pour afficher uniquement les villes où l'âge moyen est supérieur à 25 ans :
<code class="language-sql">SELECT City, AVG(Age) AS AvgAge FROM Students GROUP BY City HAVING AvgAge > 25;</code>
Différences clés
La différence fondamentale entreHAVING
et WHERE
est leur temps d'exécution. WHERE
filtre les lignes avant l'agrégation, tandis que HAVING
filtre les groupes après l'agrégation. Cela signifie que HAVING
est utilisé pour vérifier les conditions sur les valeurs agrégées, tandis que WHERE
est utilisé pour vérifier les conditions sur les valeurs de lignes individuelles.
Exemple
Considérez le tableau suivant avec des exemples de données :
City | Age |
---|---|
Boston | 22 |
Boston | 25 |
New York | 28 |
New York | 30 |
Los Angeles | 23 |
Los Angeles | 29 |
Requêtes utilisant WHERE :
<code class="language-sql">SELECT City, COUNT(*) AS Count FROM Students WHERE Age > 25;</code>
Sortie :
City | Count |
---|---|
New York | 2 |
Requêtes utilisant HAVING :
<code class="language-sql">SELECT City, COUNT(*) AS Count FROM Students GROUP BY City HAVING COUNT(*) > 1;</code>
Sortie :
City | Count |
---|---|
Boston | 2 |
New York | 2 |
Dans cet exemple, la clause WHERE
récupère le nombre d'étudiants de plus de 25 ans, tandis que la clause HAVING
récupère les villes avec plus de 1 étudiant dans chaque ville.
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!