データベース分野は、SQLという「もう1つの言語」が出てくるせいで 身構えてしまう人が多い分野です。 でも科目Aで問われるSQLの中心は、実は3つの単語で書けます。 この記事では SELECT文の読み方から、主キー・外部キー、正規化まで、 データベース分野の背骨を1本通します。
SQLは3つの単語から — SELECT / FROM / WHERE
SQLの基本文は「どの表から(FROM)、どの条件の行を(WHERE)、 どの列を取り出すか(SELECT)」の3部構成です。 社員表から営業部の社員名を取り出してみます。
SELECT 氏名
FROM 社員
WHERE 部署 = '営業'
読む順番のコツは、書いてある順ではなく FROM → WHERE → SELECT の順で読むことです。 「社員表を持ってきて、営業部の行に絞って、氏名の列だけ見る」。 日本語にするとただの絞り込み作業です。
主キーと外部キー — 表と表をつなぐ仕組み
主キーは、表の中で行を1つに特定できる列です。 社員番号のように、重複せず、空(NULL)でもいけない。 「同姓同名がいても社員番号なら1人に決まる」が主キーの役割です。
外部キーは、別の表の主キーを参照する列です。 社員表に「部署コード」列があり、それが部署表の主キーを指している — この参照関係が外部キーです。 存在しない部署コードを社員表に入れられないよう守る仕組み (参照整合性)とセットで問われます。
正規化 — 同じ情報を二度書かない
正規化は用語が仰々しいですが、目的は1つ。 同じ情報の重複をなくして、更新時の矛盾を防ぐことです。 たとえば注文表の全行に顧客の住所を書いていると、 引っ越し1件で何十行も直すことになり、直し漏れた行と矛盾します。 顧客表を分けて注文表からは顧客番号で参照すれば、住所の修正は1か所で済みます。
- 第1正規形 — 1つのマスに値を1つだけ入れる(繰り返し項目の排除)
- 第2正規形 — 主キーの一部だけで決まる列を別表に分ける
- 第3正規形 — 主キー以外の列で決まる列を別表に分ける
定義の暗記より、「この表のどこに重複があり、どんな更新で矛盾が起きるか」を 見つける練習の方が得点につながります。試験の正規化問題は、ほぼこの一点を突いてきます。
結合と集計 — あと2つだけ
分けた表は結合(JOIN)で組み合わせて使います。 「社員表と部署表を部署コードでつないで、社員名と部署名を並べる」が典型です。 もう1つの頻出が集計で、 GROUP BY で「部署ごと」にまとめ、COUNT や AVG で数えたり平均したりします。 「グループにまとめてから条件で絞る」ときは WHERE ではなく HAVING を使う — ここが選択肢の定番の引っかけです。
頻出ミスまとめ
- WHEREとHAVINGの混同 — 行の絞り込みはWHERE、集計後のグループの絞り込みはHAVING
- 主キーにNULLを許す選択肢を選ぶ — 主キーは重複NG+NULL NG。両方セットで覚える
- 正規化の目的を「検索を速くする」と答える — 目的は重複排除と更新時の整合性です
- 外部キーの向きの取り違え — 参照する側(社員表の部署コード)が外部キー、参照される側(部署表)の列が主キー
背骨が通ったら、データベースカテゴリで 演習してみてください。SELECT文はFROMから読む、正規化は重複を探す。 この2つの習慣だけで、正答率は目に見えて変わります。