WHERE används för att välja data i de ursprungliga tabellerna som bearbetas.
HAVING används för att filtrera data i resultatuppsättningen som skapades av frågan. Det betyder att den kan referera till aggregerade värden och alias i SELECT klausul.
Kan till exempel skriva:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Detta skulle inte fungera med WHERE eftersom diff är ett alias, inte en av de ursprungliga tabellkolumnerna. Du kan skriva istället:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
men då kan den behöva göra alla subtraktioner två gånger:en gång för att välja och igen för att producera resultatuppsättningen.