WHERE
処理中の元のテーブルのデータを選択するために使用されます。
HAVING
クエリによって生成された結果セットのデータをフィルタリングするために使用されます。これは、SELECT
で集計値とエイリアスを参照できることを意味します 条項。
たとえば、次のように書くことができます:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
これは、WHERE
を使用しても機能しません diff
はエイリアスであり、元のテーブル列の1つではありません。代わりに書くことができます:
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
ただし、すべての減算を2回実行する必要がある場合があります。1回は選択用で、もう1回は結果セットを生成するためです。