【Day36】SQLのサブクエリとビュー入門

投稿者: | 2025年9月10日

こんにちは!
これまでに DDL/DML・集約・JOIN を学びましたが、今日は 応用編 の「サブクエリ」と「ビュー」です。
午後問題ではほぼ毎年出てくる大事な分野です。

SQLサブクエリイメージ画像 ここならどっとこむ

🔹 サブクエリ(Subquery)

サブクエリとは SQLの中に入れ子で書くSQL のこと。
「一回SQLで調べた結果を、別のSQLで使う」イメージです。

✅ 例1:1人の生徒の平均年齢より年上の生徒を探す

SELECT Name, Age
FROM Student
WHERE Age > (SELECT AVG(Age) FROM Student);

👉 (SELECT AVG(Age) FROM Student) がサブクエリ。
👉 まず平均年齢を出して、その数値を使って検索。


✅ 例2:EXISTS(存在チェック)

SELECT Name
FROM Student S
WHERE EXISTS (
  SELECT *
  FROM Score T
  WHERE S.StudentID = T.StudentID
);

👉 「成績表に載っている生徒だけ」表示する。


✅ 幼稚園的なたとえ

  • サブクエリは「おつかいのメモ」
    • ママ「スーパーで、一番安いリンゴの値段を調べてきて!」(サブクエリ)
    • 「じゃあ、その値段より安いみかんを買ってきて!」(メインクエリ)

🔹 ビュー(View)

ビューは よく使うSELECT文を保存しておく仮想テーブル
データがコピーされるのではなく、「見え方を決めた窓」みたいなもの。

✅ 例

CREATE VIEW AdultStudent AS
SELECT Name, Age
FROM Student
WHERE Age >= 18;

👉 以降は、

SELECT * FROM AdultStudent;

で呼び出せる。

✅ メリット

  • 複雑なSQLを簡単に再利用できる
  • セキュリティ向上(見せたいデータだけ公開できる)

🔹 午前問題の過去問

過去問①(令和3年・春・午前)

SQLのサブクエリを利用する目的として、最も適切なものはどれか。

  1. 複数の表を結合して検索を高速化する
  2. 一つのSQL文の中で、別のSQLの結果を条件として利用する
  3. 表にアクセスするユーザーの権限を制御する
  4. トランザクションの整合性を保つ

➡️ 正解:2


過去問②(令和元年・秋・午前)

ビューに関する記述のうち、適切なものはどれか。

  1. ビューは物理的に独立した表であり、データを保存する
  2. ビューは既存の表を基に作られ、仮想的な表として利用できる
  3. ビューは作成後に削除することはできない
  4. ビューを利用するには必ずJOINを含める必要がある

➡️ 正解:2


🔹 午後問題の過去問

過去問例(平成30年・秋・午後)

「社員テーブル(社員ID, 部署ID, 給与)」と「部署テーブル(部署ID, 部署名)」がある。
各部署の平均給与より高い給与をもらっている社員とその部署名を求めるSQLを答えよ。

➡️ 解答例:

SELECT E.社員ID, D.部署名, E.給与
FROM 社員 E
JOIN 部署 D
ON E.部署ID = D.部署ID
WHERE E.給与 > (
  SELECT AVG(給与)
  FROM 社員
  WHERE 部署ID = E.部署ID
);

👉 サブクエリで「部署ごとの平均給与」を出して、メインで比較!


🔹 まとめ

  • サブクエリ → SQLの中のSQL。「一度調べた結果を条件に使える」
  • ビュー → 複雑なSQLを仮想テーブル化して再利用できる

午後問題では JOIN + GROUP BY + サブクエリ + ビュー の組み合わせが王道。