サブクエリは、ビューを基本とした技術です。サブクエリの特徴を一言で表わすと、「使い捨てのビュー」です。おまけ的な(SELECT)がサブクエリ。
実際、この SELECT 文は、入れ子構造になっていて、まず FROM 句の中の SELECT 文が実行され、その後に外側の SELECT 文が実行される、という順番になります。
また、サブクエリの階層数には原則的に制限はない(Oracle の Where には最大 255 という制限がある)ので、サブクエリの中の FROM 句に更にサブクエリを使って、その中の FROM 句に更にサブクエリを……というように、いくらでも入れ子を深くすることが可能です。
サンプル
例として以下の社員マスタを使用して副問合せを行います。
| 社員コード | 社員名 | 給与 |
|---|---|---|
| 00001 | チャーリー・ブラウン | 220000 |
| 00002 | ルシール・ヴァン・ぺルト | 205000 |
| 00003 | ライナス・ヴァン・ぺルト | 190000 |
| 00004 | シュローダー | 200000 |
| 00005 | ペパーミント・パティ | 300000 |
| 00006 | マーシー | 230000 |
平均以上の給与を持つ社員を取得します。
SQL
SELECT 社員名, 給与
FROM 社員
WHERE 給与 >= (
SELECT AVG(給与)
FROM 社員
)
結果
| 社員名 | 給与 |
|---|---|
| ペパーミント・パティ | 300000 |
| マーシー | 230000 |