SELECT文(集約関数)とは?WHEREとHAVINGの違い

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

SELECT文とは(全体像)

SELECT文とは、データベースから、条件に合うデータを取り出すSQL命令のことだ。基本の形は、こうなる。

SELECT 取り出す列 FROM 表 WHERE 条件 GROUP BY 集計のまとまり HAVING 集計後の条件 ORDER BY 並べ替え

ここで活躍するのが、集約関数。これは、データをまとめて計算する関数だ。

ここで一番のポイント。WHEREとHAVINGは、役割が違うWHEREは「(集計する前の)行を絞り込む」、HAVINGは「集計した後の結果を絞り込む」。「WHEREとHAVINGは同じ」と思い込むと誤りになる。


詳しく:WHEREとHAVINGの違い

ここが心臓部。ポイントを表で押さえよう。

SELECT文のポイント

項目やさしい意味
SELECTデータを取り出すSQL命令
集約関数まとめて計算(COUNT・SUM・AVG・MAX・MIN)
WHERE(集計する前の)行を絞り込む
HAVING集計した後の結果を絞り込む

WHEREとHAVINGは、似ているが、絞り込むタイミングが違う。WHEREは、集計する前に、対象の行を絞り込むHAVINGは、集計した後の結果に対して、絞り込む

たとえば、「部署ごとの平均給与(集計)を出して、その平均が30万円以上の部署だけ表示」したいとき、「平均が30万円以上」の条件は、集計後なのでHAVINGを使う。ここで一番のポイント。集計後の絞り込みはHAVINGだ。「集計後の条件もWHEREで書く」と思い込むと誤りになる。

わかりやすく言い換えると

身近なたとえで整理しよう。

SELECT文は、「データベースへの、データ取り出しの依頼」のイメージ。

集約関数は、「件数を数える・合計する・平均を出すなど、まとめて計算する関数」こと。要するに、データを集計する。

WHEREとHAVINGの違いは、「WHEREは集計する前に行を絞り込む、HAVINGは集計した後の結果を絞り込む」こと。つまり、絞り込むタイミングが違う。


試験のツボ

🔴 一番出る:集約関数

①COUNT(件数)・SUM(合計)・AVG(平均)・MAX(最大)・MIN(最小)

②データをまとめて計算する関数

🔴 次に出る:WHEREとHAVINGの違い

①WHERE=(集計する前の)行を絞り込む

②HAVING=集計した後の結果を絞り込む

🟡 押さえると安定:SELECT文の構文

①SELECT 列 FROM 表 WHERE 条件 …の形

②GROUP BYで集計のまとまりを指定する


よくある間違い

「WHEREとHAVINGは、まったく同じものだ」→ ✗  WHEREは集計前に行を絞り込む、HAVINGは集計後の結果を絞り込む。役割が違う。

「集計した後の条件も、WHEREで書く」→ ✗  集計後の絞り込みはHAVINGを使う。WHEREは集計前の行を絞り込む。

「集約関数は、データを1件ずつ別々に表示するための関数だ」→ ✗  集約関数は、件数・合計・平均など、データをまとめて計算する関数。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(SELECT文の正体)

📝 オリジナル問題 1 SELECT文の正体

SELECT文に関する次の記述のうち、最も適切なものはどれか。

  1. 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
  2. データベースから、必要なデータを取り出すSQL命令のことだ
  3. 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
  4. 完成したシステムを宣伝して、より多く売るための広告活動である
エーアイコアラ
エーアイコアラ 解答・解説

解答は 2 です。

SELECT文は、データベースから、データを取り出すSQL命令なのです。データ取り出しの依頼なります。

選択肢1は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うのです。

選択肢判定理由
1給与計算のしくみではない
2データを取り出すSQL命令で正しい
3請求書の事務の話
4広告活動ではない

オリジナル問題2(集約関数)

📝 オリジナル問題 2 集約関数

集約関数に関する次の記述のうち、最も適切なものはどれか。

  1. 社員の給与を計算するときだけ、使われるものだとされている
  2. 取引先へ請求書を郵送するときだけ、使われるものだとされる
  3. データを1件ずつ別々に表示するための関数なのである
  4. COUNT・SUM・AVGなど、まとめて計算する関数だ
エーアイコアラ
エーアイコアラ 解答・解説

解答は 4 です。

集約関数は、COUNT・SUM・AVGなど、まとめて計算するための関数なのです。件数・合計・平均などを出すなります。

選択肢1の給与、選択肢2の請求書、選択肢3の「1件ずつ表示」は、いずれも違うのです。

選択肢判定理由
1給与計算のときだけではない
2請求書のときだけではない
3まとめて計算する関数(1件ずつではない)
4COUNT・SUM・AVGでまとめて計算で正しい

オリジナル問題3(WHEREとHAVING)

📝 オリジナル問題 3 WHEREとHAVINGの違い

WHEREとHAVINGの違いに関する次の記述のうち、最も適切なものはどれか。

  1. WHEREは集計前に行を絞り、HAVINGは集計後の結果を絞り込む
  2. 社員の給与を計算するときだけ、違いが出るとされているものである
  3. 取引先への請求書の枚数しだいで、違いが決まるとされているのだ
  4. WHEREもHAVINGも、まったく同じものだとされているのである
エーアイコアラ
エーアイコアラ 解答・解説

解答は 1 です。

WHEREは集計前に行を絞り込み、HAVINGは集計後の結果を絞り込むのです。絞り込むタイミングが違うなります。

選択肢2の給与、選択肢3の請求書、選択肢4の「まったく同じ」は、いずれも違うのです。

選択肢判定理由
1WHERE=集計前・HAVING=集計後で正しい
2給与計算で違いが出るのではない
3請求書の枚数で決まるのではない
4WHEREとHAVINGは役割が違う

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る