メインコンテンツへ
データベース

次のSQL文において、副問い合わせ(サブクエリ)の役割として適切なものはどれか。 SELECT 氏名, 給与 FROM 社員 WHERE 給与 > (SELECT AVG(給与) FROM 社員);

ア.社員テーブルを2つのグループに分割し、それぞれの平均を計算する。
イ.全社員の平均給与を計算し、その値より給与が高い社員を絞り込む条件として使用する。正解
ウ.最も給与の高い社員と最も低い社員を同時に取得する。
エ.各部署の平均給与と全体平均を比較して、全体平均を上回る部署を抽出する。

解説

副問い合わせは「先に計算してから比較する電卓の二段階計算」です。まず内側の式(全平均給与)を計算し、その結果を外側の条件式に代入して検索します。

なぜ イ が正解か

副問い合わせ(SELECT AVG(給与) FROM 社員)は外側のWHERE句が評価される前に実行され、全社員の平均給与という単一の値を返します。この値が WHERE 給与 > の比較対象として使われ、平均より高い給与を持つ社員の氏名と給与が最終的に返されます。副問い合わせが返す値は1つの数値なので、スカラ副問い合わせと呼ばれます。

なぜ ア は間違いか

テーブルを2グループに分割する処理はGROUP BY句の役割です。このSQL文にGROUP BYはなく、副問い合わせは全社員一括の平均を計算するだけです。

なぜ ウ は間違いか

最高給与と最低給与の社員を同時取得するには、UNION ALLやサブクエリの複数利用が必要です。このSQL文の副問い合わせはAVG(平均)を計算しているだけで、MAX/MINとは無関係です。

なぜ エ は間違いか

部署ごとの平均と全体平均の比較にはGROUP BYとHAVINGが必要で、このSQL文にはそれがありません。部署IDによるグループ化も行われていないため、部署ごとの集計は一切行われていません。

出典: AI生成問題(学習用)