WHERE
bruges til at vælge data i de originale tabeller, der behandles.
HAVING
bruges til at filtrere data i det resultatsæt, der blev produceret af forespørgslen. Det betyder, at den kan referere til samlede værdier og aliaser i SELECT
klausul.
kan f.eks. skrive:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
Dette ville ikke fungere med WHERE
fordi diff
er et alias, ikke en af de originale tabelkolonner. Du kunne i stedet skrive:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
men så skal den muligvis foretage alle subtraktioner to gange:én gang for at vælge og igen for at producere resultatsættet.