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.