Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la différence sémantique entre WHERE et HAVING ?

HAVING fonctionne sur la ligne résumée - WHERE opère sur toute la table avant le GROUP BY est appliqué. (Vous ne pouvez pas mettre GROUP BY de côté, HAVING est une clause réservée à une utilisation avec GROUP BY - en omettant le GROUP BY ne change pas l'action implicite qui se produit dans les coulisses).

Il est également important de noter qu'à cause de cela, WHERE peut utiliser un index alors que HAVING ne peux pas. (Dans les ensembles de résultats non groupés super triviaux, vous pouvez théoriquement utiliser un index pour HAVING , mais je n'ai jamais vu un optimiseur de requête réellement implémenté de cette manière).