Maison > Article > base de données > Comprendre la différence entre où et avoir des instructions SQL
HAVING d'abord groupes puis filtre les enregistrements, tandis que WHERE filtre les enregistrements avant de agréger . C'est-à-dire qu'il agit avant la clause GROUP BY et la clause HAVING et que la clause HAVING filtre les enregistrements du groupe après l'agrégation ; Les
objets utilisés par sont différents. La clause WHERE fonctionne sur les tables et les vues, et la clause HAVING fonctionne sur les groupes. WHERE sélectionne les lignes d'entrée avant les calculs de regroupement et d'agrégation (il contrôle donc quelles lignes entrent dans le calcul d'agrégation), tandis que HAVING sélectionne les lignes groupées après le regroupement et l'agrégation. Par conséquent, la clause WHERE ne peut pas contenir une fonction d'agrégation car cela n'a aucun sens d'essayer d'utiliser une fonction d'agrégation pour déterminer quelles lignes sont entrées dans l'opération d'agrégation. En revanche, la clause HAVING contient toujours des fonctions d'agrégation. (À proprement parler, vous pourriez écrire la clause HAVING sans utiliser l'agrégation, mais ce serait une perte de temps. La même condition pourrait être utilisée plus efficacement à l'étape WHERE.) Par exemple :
select * from tablenamewhere id > ; 1; et
sélectionner * à partir du nom de table ayant l'identifiant > 1
Il n'y a aucune différence entre les résultats de la requête. Il n'est pas recommandé d'utiliser have
pour résumer en deux phrases :
L'instruction WHERE précède l'instruction GROUPBY ; SQL calculera l'instruction WHERE avant le regroupement.
L'instruction HAVING vient après l'instruction GROUPBY ; SQL calculera l'instruction HAVING après le regroupement.
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!