WHERE
służy do wybierania danych w oryginalnych przetwarzanych tabelach.
HAVING
służy do filtrowania danych w zestawie wyników wygenerowanym przez zapytanie. Oznacza to, że może odwoływać się do wartości zagregowanych i aliasów w SELECT
klauzula.
Na przykład może napisać:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
To nie zadziałałoby przy użyciu WHERE
ponieważ diff
jest aliasem, a nie jedną z oryginalnych kolumn tabeli. Zamiast tego możesz napisać:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
ale wtedy może być konieczne wykonanie wszystkich odejmowań dwukrotnie:raz w celu wybrania i ponownie w celu uzyskania zestawu wyników.