Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql - HABEN vs. WO

WHERE wird verwendet, um Daten in den zu verarbeitenden Originaltabellen auszuwählen.

HAVING wird verwendet, um Daten in der Ergebnismenge zu filtern, die von der Abfrage erzeugt wurde. Das heißt, es kann auf aggregierte Werte und Aliase im SELECT verweisen Klausel.

Kann zum Beispiel schreiben:

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

Dies würde mit WHERE nicht funktionieren weil diff ist ein Alias, keine der ursprünglichen Tabellenspalten. Sie könnten stattdessen schreiben:

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

aber dann müssen möglicherweise alle Subtraktionen zweimal durchgeführt werden:einmal zum Auswählen und erneut, um die Ergebnismenge zu erzeugen.