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

MySql - AVOIR vs OÙ

WHERE est utilisé pour sélectionner les données dans les tables d'origine en cours de traitement.

HAVING est utilisé pour filtrer les données dans le jeu de résultats qui a été produit par la requête. Cela signifie qu'il peut référencer des valeurs agrégées et des alias dans le SELECT clause.

Par exemple, peut écrire :

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10

Cela ne fonctionnerait pas avec WHERE parce que diff est un alias, et non l'une des colonnes de la table d'origine. Vous pourriez écrire à la place :

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10

mais il se peut qu'il doive alors effectuer toutes les soustractions deux fois :une fois pour sélectionner et une autre fois pour produire le jeu de résultats.