FE Study
FE Study メニュー

学習記録はこのブラウザー内に保存されます。

ホーム基礎知識ガイド
ログイン不要・無料で学習

テクノロジ系

データベースの基礎|表・条件・集計の順序を読む

主キー、SQL、NULL、集約、トランザクションを、小さな表を手で追いながら整理する基本情報技術者試験のデータベース入門です。

データベース問題では、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以上の部署だけを表示します。

  1. SQLは SELECT department, COUNT(*) AS order_count FROM orders WHERE amount >= 1000 GROUP BY department HAVING COUNT(*) >= 2 ORDER BY department; と書けます。COUNT(*)は条件を通った注文行を数えます。
  2. WHEREを各行へ適用します。O1(800円)とO5(500円)を除くため、残るのはO2・O3・O4・O6の4行です。まだ部署ごとの件数ではありません。
  3. GROUP BY departmentで4行を分けます。営業はO2・O3の2件、開発はO4の1件、総務はO6の1件です。ここまでの中間結果は「営業/2、開発/1、総務/1」の3グループです。
  4. HAVING COUNT(*) >= 2は集約後の件数を判定するので、営業だけが残ります。最終的な出力はdepartmentが「営業」、order_countが「2」の1行です。
  5. 条件をamount >= 1500に変えて検算します。O3・O4・O6が残りますが各部署1件のため、同じHAVINGでは出力が0行になります。条件を通る注文があることと、結果に部署が出ることは別です。

ここで確認:WHEREは「1件の注文の金額」、HAVINGは「部署ごとに数えた件数」を調べます。SQLの語順を眺めるだけでなく、6行→4行→3グループ→1行の変化を自分で再現してください。

確認してから、演習へ進む

間違えやすいポイント

  • 主キーを「必ず連番の列」と考えない。重複しない識別子ならよい。
  • WHEREとHAVINGを、SQLの見た目だけで入れ替えない。
  • NULLを0や空文字列と同じ値として比較しない。

自分で確かめる三つの手順

  1. 二つの小さな表を用意し、主キーと外部キーに印を付ける。
  2. SQLの各句に「行」「グループ」「表示」のどれかを書き添える。
  3. 更新が途中で失敗したとき、どの状態なら困るかを一文で説明する。

具体的なデータで、手を動かしてみよう

途中の表と解答を照合できる実習です。まず紙に自分の考えを書き、確認問題で条件を変えた場合も考えてみましょう。

この分野の演習問題

ガイドを読んだ後は、対応する7問で、理由を説明しながら理解を確かめましょう。 正答率は振り返りのための記録であり、本試験の評価点や合否を予測するものではありません。

範囲と参照資料

このページは本サイト独自の学習用解説です。試験範囲や用語の最終確認には、IPA:試験要綱・シラバス ↗を確認してください。制度や出題範囲は変更されることがあります。