「SQL Server - 相関副問い合わせ(相関サブクエリ)」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

18行目: 18行目:
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== 実行プロセス ==
相関サブクエリの実行プロセスを以下に示す。
# まず、外部クエリが実行されて、処理対象の行レコードが特定される。
# 外部クエリの各レコードに対して、
#* そのレコードの値を使用して内部クエリ (サブクエリ) が実行される。
#* サブクエリの結果を使用して、その行を最終結果に含めるかどうかが判断される。
# このプロセスが外部クエリの全てのレコードに対して繰り返される。
<br>
<syntaxhighlight lang="sql">
SELECT e1.employee_name, e1.salary
FROM employees e1
WHERE e1.salary > (
    SELECT AVG(salary)
    FROM employees e2
    WHERE e1.department = e2.department
);
</syntaxhighlight>
<br>
# 外部クエリがemployeesテーブルから最初の従業員レコードを取得する。
# その従業員のdepartmentカラムを使用して、サブクエリがその部門の平均給与を計算する。
# 従業員のsalaryカラムと計算された平均給与を比較する。
# 条件を満たせば結果セットに含める。
# 次の従業員レコードに移動して、2〜4を繰り返す。
<br>
このような動作特性から、以下に示すことがわかる。<br>
* 外部クエリの各レコードに対してサブクエリが実行されるため、処理時間が長くなる。
* データ量が多い場合、パフォーマンスへの影響を考慮する必要がある。
* インデックスの適切な設定が重要になる。
<br><br>
<br><br>