WHERE
se používá k výběru dat v původních zpracovávaných tabulkách.
HAVING
se používá k filtrování dat v sadě výsledků, která byla vytvořena dotazem. To znamená, že může odkazovat na agregované hodnoty a aliasy v SELECT
doložka.
Můžete například napsat:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Toto by nefungovalo pomocí WHERE
protože diff
je alias, nikoli jeden z původních sloupců tabulky. Místo toho můžete napsat:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
ale pak možná bude muset provést všechna odečítání dvakrát:jednou pro výběr a znovu pro vytvoření výsledné sady.