「副問い合わせって何?」
応用情報技術者試験のSQL分野で超頻出ですが、
- SELECTの中にSELECT?
- どの順番で実行される?
- EXISTSやINが分からない…
で混乱する人がかなり多いテーマです。
この記事では、
- 副問い合わせとは?
- 使い方
- IN / EXISTS
- 試験での頻出ポイント
を5分で理解できるように解説します!
まず結論
副問い合わせとは?
「SQLの中に書くSQL」
です!
イメージ
SELECT …
FROM …
WHERE ○○ = (
SELECT …
)
何のために使う?
「別の検索結果を使って検索したい」
時に使う!
学校で理解しよう
かなり分かりやすい👇
学生表
| 学生ID | 名前 | クラス |
|---|---|---|
| 1 | 田中 | A |
| 2 | 鈴木 | B |
| 3 | 佐藤 | A |
「A組の学生だけ取得したい」
もちろん直接書ける👇
SELECT 名前
FROM 学生
WHERE クラス = ‘A’;
でも例えば
「田中と同じクラスの学生」
を取得したい場合は?
まず必要なのは?
「田中のクラス」
そこで副問い合わせ!
SELECT 名前
FROM 学生
WHERE クラス = (
SELECT クラス
FROM 学生
WHERE 名前 = ‘田中’
);
実行順序
超重要!
① 内側SQL実行
SELECT クラス
FROM 学生
WHERE 名前 = ‘田中’
↓
A
② 外側SQL実行
WHERE クラス = ‘A’
結果
- 田中
- 佐藤
取得!
副問い合わせの種類
応用情報で超頻出!
① 単一行副問い合わせ
結果が1行。
WHERE 点数 > (
SELECT AVG(点数)
FROM 成績
)
平均点より高い学生取得!
② 複数行副問い合わせ
結果が複数行。
INを使う
SELECT 名前
FROM 学生
WHERE 学生ID IN (
SELECT 学生ID
FROM 成績
);
INとは?
「含まれているか」
EXISTS
超頻出!
EXISTSとは?
「存在するか」
例
SELECT 名前
FROM 学生 s
WHERE EXISTS (
SELECT *
FROM 成績 t
WHERE s.学生ID = t.学生ID
);
意味
「成績が存在する学生」
取得。
相関副問い合わせ
ここ難関!
特徴
外側SQLの値を内側で使う
例
WHERE s.学生ID = t.学生ID
外側のsを内側で参照!
これが:
相関副問い合わせ
副問い合わせを書く場所
| 場所 | 用途 |
|---|---|
| WHERE | 条件 |
| FROM | 仮想表 |
| SELECT | 計算結果 |
FROM句副問い合わせ
SELECT *
FROM (
SELECT …
) A
仮想テーブルを作るイメージ!
応用情報で超頻出
かなり狙われる👇
- 副問い合わせ
- IN
- EXISTS
- 相関副問い合わせ
- AVG
- 集約関数
よくあるひっかけ
「外側SQLから実行」
→ 違う!
通常は:
内側SQLから実行
1分で復習!
副問い合わせ
SQLの中のSQL
IN
含まれるか
EXISTS
存在するか
相関副問い合わせ
外側値を内側利用
練習問題
問題
副問い合わせの説明として最も適切なものはどれか。
ア
SQL文の中で別のSQL文を実行する仕組み
イ
表を削除するSQL
ウ
データ型を変更するSQL
エ
索引を作成するSQL
解答
正解:ア
解説
副問い合わせは、SQL文の中に別のSQL文を記述し、その結果を利用する仕組みです。
まとめ
副問い合わせとは
「SQLの中のSQL」
超重要
- IN
- EXISTS
- 相関副問い合わせ
- 実行順序
まずは、
「先に内側SQL実行」
この流れを理解するとかなり分かりやすくなります!
知識に自信ができた方は、今度は自身のキャリアアップに向けて準備してみませんか?

まずは無料でキャリア相談

コメント