Oracle試験道場

1Z0-071 · Silver SQL

副問合せを使用した問合せの解決

★★☆☆☆
Q11of 20

以下のSQL文の結果として正しいものはどれですか。Silver SQL11

以下のSQL文の結果として正しいものはどれですか。

SELECT employee_id, salary FROM employees 
 WHERE salary > (SELECT AVG(salary) FROM employees);

Choices選択肢

  • A全従業員の給与
  • B平均給与以上の従業員リスト正解
  • C平均給与以下の従業員リスト
  • D最低給与の従業員リスト
Answer

正解は、Bです

Explanation解説

副問合せで全従業員の平均給与を算出した上で、それより高い給与を持つ従業員を抽出しています。

処理の流れ:

  1. 副問合せ(内側): SELECT AVG(salary) FROM employees で全従業員の平均給与を取得
  2. 主問合せ(外側): その平均給与より大きい給与を持つ従業員の employee_idsalary を返す

単一行副問合せの特徴:

副問合せが 1行1列 だけ返すため、比較演算子(=, <, >, <=, >=)で直接比較できます。これを 単一行副問合せ と呼びます。

もし副問合せが複数行返す場合:

-- 部署ごとの平均給与(複数行)と比較するとエラー
WHERE salary > (SELECT AVG(salary) FROM employees GROUP BY department_id)
-- ORA-01427: single-row subquery returns more than one row

複数行を返す場合は IN, ANY, ALL などの複数行副問合せ演算子を使う必要があります。