前回、SQLについての記事を書いたので、今回も引き続きSQLについて書こうと思います。
今回はHAVINGについて説明します。
個人的にはあんまり使う機会がないのですが、けっこう頻繁に使い方を忘れてしまうので……。
使用するテーブルは以下の通りです。
name | class |
---|---|
鈴木 | Aクラス |
田中 | Aクラス |
山田 | Bクラス |
佐藤 | Bクラス |
渡辺 | Bクラス |
中村 | Cクラス |
まずはHAVINGのみを単体で使用します。
SQL
SELECT name, class from TABLE1 HAVING class = 'Aクラス';
すると、以下のような結果が抽出されます。
name | class |
---|---|
鈴木 | Aクラス |
田中 | Aクラス |
お察しの通り、WHEREとまったく同じ動きをします。
少しややこしいのですが、HAVINGとWHEREは呼び出されるタイミングが違って、そこによって使い分けます。
WHEREはGROUP BYされる前の段階の抽出条件を指定する句であり、HAVINGはGROUP BYが適用された後の抽出条件を指定する句になっています。
逆に言えば、GROUP BYが使用されていないSQLの中ではWHEREとHAVINGは全く同じ動きをするわけです。
そんな事情で、HAVINGはほとんどの場合、GROUP BYと一緒に使用されることになります。
次回は実際にどのような動きをするのかを説明したいと思います。