【SQL】一目でわかる!HAVINGとWHEREの違いと活用方法

50種類以上のIT教材を無料で使える!
0円から学習できるオンラインITスクール「侍テラコヤ」
→さっそく登録する

みなさんこんにちは!

フリーランスプログラマーのsatoです。

今回は「GROUP BY」などと合わせて使用される「HAVING」について学んでみましょう。

  • [基本]「HAVING」とは
  • [基本]「HAVING」の使い方!
  • [基本]「WHERE」と「HAVING」の違い
  • [応用]集計関数と合わせて使ってみよう!

まず「HAVING」とはなんなのかを学び、続けて気になる「WHERE」との違いなど応用的な話を見ていきましょう。

「HAVING」とは

まず「HAVIING」を一言で説明すると、「抽出条件を指定」する命令です。実際使ってみれば一発でわかると思いますので、実例を見てみましょう。


【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

今回使用するテーブル

その前に今回使用するテーブルについて見ておきましょう。今回はシンプルなテーブルを用意しています。今後はこのテーブルを使用して実例を見ていきましょうか。

userテーブル:

+--------+------------+
| name   | team       |
+--------+------------+
| 山田   | チームA    |
| 鈴木   | チームA    |
| 加藤   | チームA    |
| 田中   | チームB    |
| 小林   | チームB    |
+--------+------------+

「HAVING」の使い方!

では実際に見ていきましょう。

例えば所属チーム(team)要素が「チームA」の人のみ抽出したい場合は以下のコマンドとなります。

SELECT * FROM user HAVING team="チームA";
+--------+------------+
| name   | team       |
+--------+------------+
| 山田   | チームA    |
| 鈴木   | チームA    |
| 加藤   | チームA    |
+--------+------------+

うまく抽出されていますね!

このように「HAVING」の後ろに条件を書くことで使用できるわけです。

SELECT [表示したい要素] FROM [テーブル名] HAVING [抽出条件];

非常にシンプルに扱えることがわかっていただけたと思います。


【何から学べばいいかわからない…そんな悩みを解決します!】

完全無料ですぐわかる「プログラミング学習プラン診断」

・適性にあわせて学習プランを診断
・完全無料で気軽に診断できる
・学習の悩みもまるっと解決

さっそく診断してみる

「WHERE」と「HAVING」の違い

しかしここで一つの疑問点が生まれる人もいるでしょう。そう「WHERE」の存在です。

「WHERE」とは

一度でも使ったことがある人はご存知だと思いますが、「WHERE」も「HAING」と同じく「抽出条件を指定」するコマンドでのです。つまり、先ほどの処理は「WHERE」で書いても全く同じ結果が返ってくるんです。

SELECT * FROM user WHERE team="チームA";
+--------+------------+
| name   | team       |
+--------+------------+
| 山田   | チームA    |
| 鈴木   | チームA    |
| 加藤   | チームA    |
+--------+------------+

ではこの二つの違いはなんでしょうか。

違いは呼ばれるタイミング!

見出しにも書いてありますが、違いはズバリ呼ばれるタイミングです。以下の画像は、SELECT文を使用した時の、命令の呼ばれる順番です。

今回の主役である「WHERE」と「HAVING」は画像の通り「WHERE」→「GROUP BY」→「HAVING」の順に呼ばれるわけです。つまり間にある「GROUP BY」が関わってこなければ、全く同じ挙動をしますが、
「GROUP BY」を使って、グループ化を行った際には、以下の違いが出てくるわけです。

WHERE・・・グループ化をされる前の段階、つまり元々のデータでの抽出条件を指定できる
HAVING・・・グループ化した後の情報での、抽出条件を指定できる。

この辺りの違いは「GROUP BY」を実際に行った例で理解が出来ると思います。「GROUP BY」の記事に詳細を載せていますので、実例を見て理解を深めてみてください。

【SQL】GROUP BYで自在に集計!集計関数やHAVINGと合わせて使おう
更新日:2023年3月21日

まとめ

今回はHAVINGの使い方を見てきました。

処理の順番が違うだけで、基本的な挙動は「WHERE」と同じというわけです。ということはつまり「GROUP BY」を使用した特殊なことをやる場合に「HAVING」を活用しつつ。それ以外は基本的には「WHERE」を使用すれば良いということですね!

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

Writer

sato

学生時代を含めると、かれこれ10年以上プログラマーとして過ごしています。
様々な言語や環境、プロジェクトに関わってきましたので、より実践的な記事をみなさんにお届きるよう情報発信していきます!

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close