WHERE
digunakan untuk memilih data dalam tabel asli yang sedang diproses.
HAVING
digunakan untuk memfilter data dalam kumpulan hasil yang dihasilkan oleh kueri. Ini berarti dapat mereferensikan nilai agregat dan alias di SELECT
klausa.
Misalnya, dapat menulis:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Ini tidak akan berfungsi menggunakan WHERE
karena diff
adalah alias, bukan salah satu kolom tabel asli. Anda dapat menulis sebagai gantinya:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
tetapi kemudian ia mungkin harus melakukan semua pengurangan dua kali:sekali untuk memilih, dan sekali lagi untuk menghasilkan kumpulan hasil.