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.