はじめに
SQLを学んでいると「サブクエリ(副問い合わせ)」という言葉を耳にすることが多いでしょう。
サブクエリは、SELECT文の中にさらにSELECT文をネスト(入れ子構造)して使う機能です。
複雑な条件指定や集計処理をシンプルに書けるため、業務システムやデータ分析で頻繁に活用されます。
この記事では、サブクエリの基本から実践的な使い方まで、実例を交えて徹底解説します。
サブクエリとは?
**サブクエリ(Subquery)**とは、SQL文の中に埋め込まれるSELECT文のことです。
通常のSQL文の一部として利用され、主に次のような用途があります。
- 
WHERE句での条件指定 
- 
FROM句での仮想テーブル生成 
- 
SELECT句での派生列計算 
サブクエリの基本構文
サブクエリの基本的な形は以下の通りです。
用途によって、スカラサブクエリ、行サブクエリ、テーブルサブクエリと呼ばれることもあります。
例1:WHERE句でのサブクエリ
もっともよく使われるのが WHERE句での利用 です。
例えば「平均給与より高い社員を取得する」場合は次のように書けます。
- 
サブクエリ (SELECT AVG(給与) FROM 社員)で平均給与を取得
- 
メインクエリで給与がそれを上回る社員を抽出 
例2:IN句とサブクエリ
複数の値を条件にする場合は IN句 を利用します。
- 
サブクエリで特定の日に注文された商品IDを取得 
- 
メインクエリでその商品情報を表示 
例3:FROM句でのサブクエリ(派生テーブル)
FROM句でサブクエリを使えば、仮想テーブルを作成して結合や集計が可能です。
- 
サブクエリで部署ごとの平均給与を計算 
- 
メインクエリで平均給与が30万円を超える部署を抽出 
例4:SELECT句でのサブクエリ
SELECT句にサブクエリを埋め込むことで、計算列を動的に追加できます。
- 
社員ごとに部署名をサブクエリで取得 
- 
JOINを使わずにシンプルに表記可能(ただしパフォーマンス注意) 
サブクエリを使うときの注意点
- 
パフォーマンスに注意 
 ネストが深すぎると処理速度が落ちる場合があります。JOINやCTE(共通テーブル式)で置き換えを検討しましょう。
- 
返却される値の型に注意 
 単一値を期待しているのに複数行が返るとエラーになります。
- 
読みやすさを意識 
 サブクエリは便利ですが、複雑になると可読性が低下します。適切にインデントを整えるのが重要です。
- DBMS別:サブクエリ対応表
 DBMS WHERE句でのサブクエリ FROM句でのサブクエリ SELECT句でのサブクエリ 相関サブクエリ 備考 Oracle ○ 完全対応 ○ インラインビュー ○ 利用可 ○ 高性能 大規模業務で多用 MySQL ○ (v4.1以降対応) ○ 利用可 ○ 利用可 △ パフォーマンス注意 古いバージョンでは非対応 PostgreSQL ○ 標準準拠 ○ 利用可 ○ 利用可 ○ 高性能 複雑な分析処理に強い SQL Server ○ 完全対応 ○ 利用可 ○ 利用可 ○ ただし過剰利用注意 実行計画が膨らむことあり 
まとめ
- 
サブクエリはSQL文の中でネストされたSELECT文 
- 
WHERE、FROM、SELECTなど多くの場面で利用可能 
- 
集計や複雑な条件指定をシンプルに書ける 
- 
パフォーマンスと可読性に注意が必要 
サブクエリをマスターすることで、SQLの表現力が大幅に広がります。
まずはシンプルなWHERE句から練習し、徐々に複雑なケースに挑戦してみましょう!

