副問合せ(subquery)

分類
テクノロジ系 データベース
出る試験
基本情報応用情報
重要度
★★★☆☆

SELECT文の中に書いたもう1つのSELECT文。その結果を値として使ったり、表のように扱ったりする。

もう少し詳しい説明

副問合せは、SELECT文の中に書いたもう1つのSELECT文です。内側の結果を、外側が使います。

書く場所で3つに分かれる

書く場所内側の結果の扱い呼び方
WHERE句比較に使う値、または値の並び—
FROM句表のように扱う導出表、インラインビュー
SELECT句1行1列の値スカラ副問合せ

WHERE句に書く形

内側で求めた値を、条件に使います。

SELECT 商品名, 商品単価
  FROM 商品
 WHERE 商品単価 > (SELECT AVG(商品単価) FROM 商品)

平均より高い商品を取り出す、という形です。 平均は先に求めないと比べられないので、内側で求めます。

内側が返すもの使える比較
1つの値= > < などで比べられる
複数の値IN、ANY、ALL などを使う

1つの値を返すつもりの副問合せが複数行を返すと、誤りになります。 内側が何行返すかを確かめてください。

FROM句に書く形(導出表)

内側の結果を、名前を付けた表として扱います。

SELECT CK.区分, CK.金額計
  FROM (SELECT 区分, SUM(金額) AS 金額計
          FROM 実績
         GROUP BY 区分) CK
使いどころ中身
集計した結果どうしを結合したい先に集計してから、表として結び付ける
段階を分けて書きたい中間の結果に名前を付けて読みやすくする

集計した結果どうしを結合する場面で効きます。 集計の単位が違う2つを、それぞれ先に集計してから突き合わせる形です。

このとき、片方にしか無い区分を残したいなら外部結合にします。残した側のNULLは、COALESCEで0に置き換えられます。

相関副問合せ

内側が、外側の行の値を参照する形です。

SELECT 社員番号, 氏名
  FROM 社員 S
 WHERE 給与 > (SELECT AVG(給与) FROM 社員
                WHERE 部署コード = S.部署コード)

外側の1行ごとに、内側が計算し直されます。 「その人の部署の平均より高い人」のように、行ごとに基準が変わる条件を書けます。

ふつうの副問合せ相関副問合せ
内側の計算1回だけ外側の行ごと
外側の値を使うか使わない使う
処理の重さ軽い重くなりやすい

結合との使い分け

したいこと向くほう
両方の表の列を並べて出す結合
条件の判定にだけ使う副問合せ
集計した結果どうしを突き合わせるFROM句の副問合せ + 結合

同じ結果を、結合でも副問合せでも書けることがあります。 読みやすいほうを選ぶ、という判断になります。

試験ではこう出る

科目A(旧・午前)では、副問合せの意味と、相関副問合せとの区別が問われます。外側の値を使うかどうかです。

午後や応用情報(データベース)では、SQLの空欄に書く形で出ます。FROM句の副問合せに名前を付ける部分や、外側と内側をつなぐ結合の書き方が空欄になります。

内側が何を返すか(1つの値か、表か)を先に読むと、外側の書き方が決まります。

関連する用語

SQLの句
SELECT文を組み立てる部品。副問合せを書く場所が決まる
SQLの結合とDISTINCT
表をつなぐもう1つのやり方。使い分けになる
集約関数とNULL
副問合せの中でよく使う関数
基底表とビュー
問合せに名前を付けて残す形。副問合せと考え方が近い

ミニクイズ

副問合せの説明として、最も適切なものはどれか。

正解は 3番:SELECT文の中に書いたもう1つのSELECT文で、その結果を値や表として使う

副問合せは、SELECT文の中に書いたもう1つのSELECT文です。その結果を1つの値として比較に使ったり、表のように扱ってFROM句に置いたりします。条件に合う行どうしを結び付けるのは結合、名前を付けて保存するのはビュー、重複を取り除くのはDISTINCTで、いずれも別のものです。

間違えた用語の復習リストを見る →

この分野をまとめて解く → データベースのミニテスト(全35問)

最終更新:2026-11-09