小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

WHERE句とHAVING句の違い

SQLでのWHERE句とHAVING句は、どちらも、入力行を絞ります。では、違いは何でしょうか……。


WHERE句は、グループ化や集約を演算する前に入力行を絞ります。
一方、HAVING句 は、グループと集約を演算した後に、グループ化された行を絞ります。


従って、WHERE句は集約前に評価されるので集約関数を持つことはできません。一方、HAVING 句は、集約後に評価されるので集約関数を持つことができます。


つまり、はじめにWHERE句で行を絞り、それをGROUP BY句でグループ化し、それを(グループ内を)HAVING句でまた絞る・・・てな感じです。


ちなみに、GROUP BY句とHAVING句はペアで使うものと思っている人がいるかもしれませんが(実は自分)……。実は、テーブル全体を一つの集合として、GROUP BY句なしで、HAVING句を問題なく使用することができます。