WHERE
се използва за избор на данни в оригиналните таблици, които се обработват.
HAVING
се използва за филтриране на данни в резултатния набор, произведен от заявката. Това означава, че може да препраща към обобщени стойности и псевдоними в SELECT
клауза.
Например, може да напише:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Това няма да работи при използване на WHERE
защото diff
е псевдоним, а не една от оригиналните колони на таблицата. Вместо това можете да напишете:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
но тогава може да се наложи да направи всички изваждане два пъти:веднъж за избор и отново, за да произведе набора от резултати.