こんにちは!今日は SQLとER図を組み合わせた過去問を使って、楽しくデータベースを学んでいきます。
この記事で分かること(目次)
1️⃣ そもそもER図ってなに?
ER図は「データ同士の関係を絵で描いたもの」です。
- エンティティ(Entity):もの(例:👦学生、📚科目、📝履修)
- リレーションシップ(Relationship):つながり(例:学生が科目を履修する)
たとえば幼稚園で例えると…
- 園児(エンティティ)
- おもちゃ(エンティティ)
- 「園児が遊ぶ(関係)」=リレーションシップ
ER図を見れば「どのテーブルがどことつながっているのか」が一目でわかります。
2️⃣ 過去問例(基本情報技術者試験)
問題
次のER図とリレーショナルスキーマに基づいて、
「学生番号が’1001’の学生が履修している科目名」を取り出すSQL文はどれか。
ER図(簡略版)
学生(学生番号, 学生名, 学科)
履修(学生番号, 科目番号)
科目(科目番号, 科目名, 単位)
関係はこうなっています👇
- 学生 1人 ↔ 履修(多)
- 科目 1つ ↔ 履修(多)
つまり「履修テーブル」が 学生と科目をつなぐ橋渡しです。
選択肢
SELECT 科目名
FROM 学生, 科目
WHERE 学生番号 = '1001';
SELECT 科目名
FROM 学生 S, 履修 R, 科目 C
WHERE S.学生番号 = R.学生番号
AND R.科目番号 = C.科目番号
AND S.学生番号 = '1001';
SELECT 科目名
FROM 履修
WHERE 学生番号 = '1001';
✅ 解説
- 1は 学生と科目を直接結んでいる → そんなつながりはないので間違い。
- 3は 科目名が履修テーブルにない → 取り出せないので間違い。
- 2は 学生→履修→科目 と正しいつながりで取得できる → 正解!
3️⃣ 幼稚園的なたとえで考えると?
「園児(学生)がどのおもちゃ(科目)で遊んでいるか」を知りたいとします。
- 園児名簿だけ見ても → 遊んでるおもちゃはわからない。
- おもちゃのリストだけ見ても → 誰が遊んでるかはわからない。
- **園児とおもちゃをつなぐ「遊んでる表(履修)」**を見ないと正解が出ない!
SQLでいうと「JOINしてつなぐ」がその役割なんですね✨
4️⃣ 試験でのポイント
- ER図を見たら「中間テーブル(多対多をつなぐ)」に注目する。
- SQLでは JOIN を使って「橋渡し」を経由する。
- SELECT文に登場するカラムが「どのテーブルにあるか」を意識する。
まとめ
- ER図は テーブルの地図。
- SQLはその地図を使って「欲しい情報を取りに行く」道具。
- 過去問では 「正しいつながりをSQLで書けるか?」 がよく出題される。
