Mysql
 sql >> Database >  >> RDS >> Mysql

MySql - AVERE vs DOVE

WHERE viene utilizzato per selezionare i dati nelle tabelle originali in elaborazione.

HAVING viene utilizzato per filtrare i dati nel set di risultati prodotto dalla query. Ciò significa che può fare riferimento a valori aggregati e alias in SELECT clausola.

Ad esempio, può scrivere:

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

Questo non funzionerebbe usando WHERE perché diff è un alias, non una delle colonne della tabella originali. Potresti invece scrivere:

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

ma poi potrebbe dover eseguire tutte le sottrazioni due volte:una per la selezione e di nuovo per produrre il set di risultati.