Les clauses `` où 'et `` ayant' 'dans SQL servent des objectifs différents, bien qu'ils filtrent tous deux les lignes en fonction des conditions. Voici une ventilation:
où clause
* Objectif: Filtre les lignes avant Toutes les opérations d'agrégation (comme «Sum», «Avg», «Count», etc.).
* s'applique à: Lignes individuelles.
* Conditions: Impliquent généralement des comparaisons et des opérateurs logiques qui fonctionnent sur des colonnes individuelles dans le tableau.
* Exemple:
`` SQL
Sélectionner * dans les clients où country ='usa';
`` '
Cette requête récupère tous les clients de la table «clients» où la colonne «country» est égale à «USA».
Avoir la clause
* Objectif: Filtre les lignes après opérations d'agrégation.
* s'applique à: Les résultats de l'agrégation (groupe BY).
* Conditions: Impliquent généralement des comparaisons de valeurs agrégées en utilisant des fonctions agrégées (par exemple, `sum (prix) ',` Avg (âge)', `compter (*)`) en combinaison avec les opérateurs logiques.
* Exemple:
`` SQL
Sélectionnez City, AVG (Age) As Aight_age
Des clients
Groupe par ville
Avoir moyen_age> 30;
`` '
Cette question regroupe les clients de «ville» et calcule l'âge moyen pour chaque ville. Ensuite, il filtre les résultats pour montrer que les villes où l'âge moyen est supérieur à 30.
Différences clés en un mot:
* timing: «Où» filtre avant l'agrégation, «avoir» filtre après.
* Scope: «Où» fonctionne sur des lignes individuelles, «ayant» fonctionne sur des résultats agrégés.
* Conditions: «Où» utilise des conditions sur des colonnes individuelles, «ayant» utilise des conditions sur les valeurs agrégées.
Quand utiliser chaque clause:
* Utilisez «où» lorsque vous souhaitez filtrer les données en fonction des valeurs de ligne individuelles avant toute agrégation.
* Utilisez «Avoir» lorsque vous souhaitez filtrer les résultats agrégés (comme les données groupées) en fonction des conditions impliquant des valeurs agrégées.
Remarque: Vous pouvez utiliser les clauses «où» et `` ayant »dans la même requête, mais« où »est appliquée d'abord pour filtrer les lignes utilisées pour l'agrégation, puis« avoir »est utilisé pour filtrer les résultats agrégés.
|