MySQLのWHERE句とHAVING句の違いとは?集計関数での使い分けを実例付きで解説
MySQLにおけるWHERE句とHAVING句の基本的な役割
MySQLでは、検索結果を絞り込むためにWHERE句という条件句を使用できます。WHERE句を使うことで、テーブルから必要なレコードだけを選択するための抽出条件(選択基準)を指定することが可能です。
一方、HAVING句は、グループ化された行や集計結果に対してフィルタ条件を指定するために使われます。
WHERE句とHAVING句の最大の違い
両者の重要な違いは次の通りです。
- WHERE句:集計関数(SUM、AVG、COUNTなど)と組み合わせて使用できない
- HAVING句:集計関数と組み合わせて使用できる
それでは、実際にサンプルテーブルを作成して動作を確認してみましょう。
サンプルテーブルの作成
まず、以下のようにテーブルを作成します。
mysql> create table WhereDemo
-> (
-> Price int
-> );
Query OK, 0 rows affected (0.64 sec)
レコードの挿入
続いて、作成したテーブルにレコードを挿入します。
mysql> insert into WhereDemo values(100); Query OK, 1 row affected (0.13 sec) mysql> insert into WhereDemo values(200); Query OK, 1 row affected (0.21 sec) mysql> insert into WhereDemo values(300); Query OK, 1 row affected (0.15 sec) mysql> insert into WhereDemo values(400); Query OK, 1 row affected (0.12 sec)
全レコードの表示
登録されたすべてのレコードを表示して確認します。
mysql> select *from WhereDemo;
実行結果は以下の通りです。
+-------+ | Price | +-------+ | 100 | | 200 | | 300 | | 400 | +-------+ 4 rows in set (0.00 sec)
HAVING句で集計関数を使用する例
HAVING句は、次のように集計関数と組み合わせて使用できます。ここでは、合計金額が500より大きい場合のみ結果を表示しています。
mysql> select sum(Price) from WhereDemo HAVING Sum(Price) > 500;
実行結果は以下の通りです。
+------------+ | sum(Price) | +------------+ | 1000 | +------------+ 1 row in set (0.00 sec)
合計値が1000であるため、条件を満たし結果が正常に返されています。
WHERE句で集計関数を使うとエラーになる
一方、WHERE句で集計関数を使用しようとすると、エラーが発生します。
mysql> select sum(Price) from WhereDemo where Sum(Price) > 200; ERROR 1111 (HY000): Invalid use of group function
このように「ERROR 1111 (HY000): Invalid use of group function」というエラーが出力され、クエリは失敗します。
まとめ
WHERE句とHAVING句の使い分けのポイントを整理すると以下のようになります。
- WHERE句:行単位のフィルタリングに使用する。GROUP BYによる集計前に適用されるため、集計関数は使えない。
- HAVING句:GROUP BYによる集計後のグループに対するフィルタリングに使用する。集計関数との組み合わせが可能。
集計結果に対して条件を指定したい場合はHAVING句を、個々の行に対して条件を指定したい場合はWHERE句を使う、と覚えておくと良いでしょう。
-
MySQLのデータベースファイルはどこに保存される?保存場所の確認方法
MySQLがデータベースファイルを実際にどのディレクトリへ保存しているのかを確認したい場合は、システム変数 @@datadir を参照するのが最も簡単な方法です。この記事では、その確認手順と、取得したパスにデータベースが正しく存在することを検証する方法までを解説します。 @@datadirでデータディレクトリを確認する まず、以下のようにSELECT文で@@datadirの値を取得します。 mysql> SELECT @@datadir; 実行結果の例 +---------------------------------------------+ | @@datadir
-
MySQLのテーブルデータはWindowsのどこに保存される?確認方法をわかりやすく解説
MySQLテーブルデータの保存場所を確認する方法MySQLで作成したテーブルのデータが、実際にWindows上のどの場所に保存されているのかを知りたいケースはよくあります。そんなときは、システム変数「datadir」を確認することで、データディレクトリの場所を簡単に把握できます。まずは、最もシンプルな方法として「@@datadir」を参照する構文を見てみましょう。select @@datadir;また、SHOW VARIABLESコマンドを使って確認することもできます。その場合の構文は以下の通りです。show variables where Variable_name = datadir;実際