WHERE
wordt gebruikt om gegevens te selecteren in de originele tabellen die worden verwerkt.
HAVING
wordt gebruikt om gegevens te filteren in de resultatenset die door de query is geproduceerd. Dit betekent dat het kan verwijzen naar geaggregeerde waarden en aliassen in de SELECT
clausule.
Kan bijvoorbeeld schrijven:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Dit zou niet werken met WHERE
omdat diff
is een alias, niet een van de oorspronkelijke tabelkolommen. Je zou in plaats daarvan kunnen schrijven:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
maar dan moet het misschien alle aftrekkingen twee keer doen:een keer om te selecteren en nog een keer om de resultatenset te produceren.