【SQL脱初心者】サブクエリ(副問合せ)を「使い捨てテーブル」と考えれば怖くない!3つの活用パターン
公開日: 2025年11月29日
SQLの学習を進めていくと、ある日突然、カッコ ( ) に囲まれた長いSQLに出くわします。 「SELECTの中にまたSELECTがある!?」「カッコが多すぎて、どこから読めばいいのか分からない…」
これが、SQL中級者への最初の壁、「サブクエリ(副問合せ)」です。 複雑に見えますが、実は考え方はとてもシンプル。サブクエリとは、その場限りの「使い捨てのミニテーブル」や「一時的な値」を作るためのテクニックなのです。
今日は、このサブクエリを「どこに書くか」で分類し、実務で絶対に使われる3つのパターンをマスターしましょう。
パターン1:WHERE句で使う(動的な条件指定)
最もよく使うパターンです。「平均点より高い点数の人を知りたい」という時、どうしますか? 「平均点」は計算してみないと分からないので、いきなり WHERE score > 70 のように数字を書くことはできません。
そこで、サブクエリを使って「平均点を計算するSQL」を埋め込みます。
SELECT name, score
FROM students
WHERE score > (
-- ここがサブクエリ!
-- まずここで平均点を計算し、その結果(例えば70点)を外側のSQLに渡す
SELECT AVG(score) FROM students
);
イメージ
カッコの中(サブクエリ)が先に実行され、70 という数字に変身します。
結果として WHERE score > 70 というクエリが完成し、実行されます。
パターン2:FROM句で使う(集計結果の再利用)
「部署ごとの平均給与を出し、さらにその平均給与が高い順にランキングしたい」といった場合です。 一度集計した結果(部署ごとの平均)を、あたかも「そういう名前のテーブルが元々あった」かのように扱いたい時に使います。
SELECT
dept_name,
avg_salary
FROM (
-- ここがサブクエリ!
-- 「部署ごとの平均給与テーブル」を一時的に作る
SELECT department AS dept_name, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
) AS temp_table -- 必ず別名を付ける!
WHERE avg_salary >= 300000;
カッコの中のSQL結果を temp_table という「使い捨てのテーブル」に見立てて、そこからさらに SELECT しているわけです。 複雑な集計を2段階に分けたい時に非常に便利です。
パターン3:SELECT句で使う(情報の付加)
各行のデータと一緒に、「全体の合計値」や「別のテーブルの情報」をちょこっと表示したい時に使います。 (これを「スカラサブクエリ」と呼びます。必ず結果が「1行1列」になる必要があります)
SELECT
name,
price,
(SELECT AVG(price) FROM products) AS global_avg_price
FROM products;
これを使うと、「商品Aの価格」の横に、全商品の「平均価格」を並べて表示できます。「平均との差」を見たい時などに役立ちます。
⚠️ 注意点:入れ子にしすぎない
サブクエリは便利ですが、使いすぎると「マトリョーシカ」のように何重にもなり、人間が解読不可能なコードになってしまいます。また、書き方によってはパフォーマンスが悪化することもあります。 最近のモダンなSQLでは、「WITH句(共通テーブル式)」を使って、サブクエリを外に出してスッキリ書く方法が推奨されています(これはまた別の記事で!)。
🤖 AIに、複雑なSQLの構造を分解させる
「他人の書いたSQL、サブクエリだらけで何がしたいのか分からない…」 そんな時は、迷わずAIコード解説ツール「SerchCode Pro」を頼ってください。
複雑に入り組んだSQLも、AIなら一瞬で 「まず内側のこの部分で〇〇を集計し、その結果を使って外側で△△をフィルタリングしています」 と、論理構造を分解して解説してくれます。 SQLの入れ子構造を脳内で展開するのは大変な作業です。そこはAIに任せて、あなたはデータの意味を考えることに集中しましょう。
まとめ
- サブクエリは、SQLの中で作る「一時的な値」や「使い捨てテーブル」である。
- WHERE句で使えば、動的な条件でフィルタリングできる。
- FROM句で使えば、集計結果をさらに加工できる。
- 複雑なSQLは、内側のカッコから順にAIに解説させると理解しやすい。
サブクエリをマスターすれば、単純なデータ取得だけでなく、「分析」のためのSQLが書けるようになります。 ぜひ、当サイトのSQL道場で、サブクエリを使った問題にも挑戦してみてください!
SQLのカッコの対応、合ってますか?
サブクエリを使うと、カッコの数が合わずにエラーになりがちです。AI SQLチェッカーなら、複雑な入れ子構造の構文ミスも一瞬で特定します。
AI SQLチェッカーを使ってみる →