【Day31】SQLとER図のつながりを理解しよう

投稿者: | 2025年9月5日

こんにちは!今日は 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で書けるか?」 がよく出題される。