データベース問題では、SQLの語順よりも「どの行が残り、いつ集計され、どの結果を表示するか」を追うことが大切です。数行の表を書き、WHERE、GROUP BY、HAVING、SELECTの役割を順番に確認すると、複雑に見える選択肢も判断しやすくなります。
この分野で身に付けること
- 主キーと外部キーの役割を、表どうしの関係で説明できる。
- WHEREとHAVING、行の絞込みとグループの絞込みを区別できる。
- トランザクションで守りたい性質を、更新の途中で考えられる。
1. 表は、一行が何を表すかから読む
表を見たら、まず一行が「一人の社員」「一件の注文」など何を表すのかを決めます。主キーは各行を一意に識別するための列で、同じ表の別の行と重複しない値が必要です。外部キーは別の表の主キーを参照し、注文と顧客のような関係を表すために使います。
列名だけで意味を決めず、問題文に示された制約も読みます。NULLは値が分からない、該当しないなどを表すことがあり、0や空文字列と同じではありません。比較や集計でNULLをどう扱うかは、DBMSや関数の仕様・問題の条件を確認して判断します。
2. SQLは、行を選んでから集計する
SELECTは表示したい列や計算を指定し、FROMは対象表を指定します。WHEREは元の行を条件で絞り込み、GROUP BYは残った行を同じ値ごとのグループにまとめます。COUNTやSUMなどの集約関数はグループごとに計算され、HAVINGは集約後のグループを絞り込みます。
SQLを暗記すると、HAVINGが出るだけで難しく感じます。小さなデータを紙に書いて、まずWHEREを通る行に印を付け、次にグループごとの件数を数え、最後にHAVINGを適用してください。選択肢の結果表がこの順で説明できるかを確かめます。
3. 更新は、途中の状態を見せないことがある
口座振替のように複数の更新が一組で意味を持つ処理では、途中だけ反映されるとデータに矛盾が生じます。トランザクションは、まとまりとして扱う処理の単位です。成功時はまとめて確定し、失敗時は必要に応じて元に戻すという考え方を、具体的な更新順と一緒に理解します。
同じデータを複数人が更新するときは、途中の値を読んだり上書きしたりする問題も起こります。排他制御やログは、正しさのための仕組みです。速度を上げる仕組みと決めつけず、どの矛盾を防ぐためかを問題文の事例から探します。
用語・考え方の比較
| 句 | 対象 | 確認する問い |
|---|---|---|
| WHERE | 集計前の各行 | この行を集計の材料に含めるか |
| GROUP BY | 残った行の集合 | どの値ごとに集計を分けるか |
| HAVING | 集計後の各グループ | この集計結果を表示するか |
例:6行の注文表を、WHERE・GROUP BY・HAVINGで絞る
注文表ordersの列はid・department(部署)・amount(金額)です。6行を「O1/営業/800円、O2/営業/1,200円、O3/営業/2,400円、O4/開発/1,500円、O5/開発/500円、O6/総務/2,000円」とします。金額が1,000円以上の注文を部署ごとに数え、その件数が2以上の部署だけを表示します。
- SQLは SELECT department, COUNT(*) AS order_count FROM orders WHERE amount >= 1000 GROUP BY department HAVING COUNT(*) >= 2 ORDER BY department; と書けます。COUNT(*)は条件を通った注文行を数えます。
- WHEREを各行へ適用します。O1(800円)とO5(500円)を除くため、残るのはO2・O3・O4・O6の4行です。まだ部署ごとの件数ではありません。
- GROUP BY departmentで4行を分けます。営業はO2・O3の2件、開発はO4の1件、総務はO6の1件です。ここまでの中間結果は「営業/2、開発/1、総務/1」の3グループです。
- HAVING COUNT(*) >= 2は集約後の件数を判定するので、営業だけが残ります。最終的な出力はdepartmentが「営業」、order_countが「2」の1行です。
- 条件をamount >= 1500に変えて検算します。O3・O4・O6が残りますが各部署1件のため、同じHAVINGでは出力が0行になります。条件を通る注文があることと、結果に部署が出ることは別です。
ここで確認:WHEREは「1件の注文の金額」、HAVINGは「部署ごとに数えた件数」を調べます。SQLの語順を眺めるだけでなく、6行→4行→3グループ→1行の変化を自分で再現してください。
確認してから、演習へ進む
間違えやすいポイント
- 主キーを「必ず連番の列」と考えない。重複しない識別子ならよい。
- WHEREとHAVINGを、SQLの見た目だけで入れ替えない。
- NULLを0や空文字列と同じ値として比較しない。
自分で確かめる三つの手順
- 二つの小さな表を用意し、主キーと外部キーに印を付ける。
- SQLの各句に「行」「グループ」「表示」のどれかを書き添える。
- 更新が途中で失敗したとき、どの状態なら困るかを一文で説明する。
具体的なデータで、手を動かしてみよう
途中の表と解答を照合できる実習です。まず紙に自分の考えを書き、確認問題で条件を変えた場合も考えてみましょう。
この分野の演習問題
ガイドを読んだ後は、対応する7問で、理由を説明しながら理解を確かめましょう。 正答率は振り返りのための記録であり、本試験の評価点や合否を予測するものではありません。
範囲と参照資料
このページは本サイト独自の学習用解説です。試験範囲や用語の最終確認には、IPA:試験要綱・シラバス ↗を確認してください。制度や出題範囲は変更されることがあります。