SQL のインライン ビュー メソッドと相関サブクエリ

Mary-Kate Olsen
リリース: 2024-10-04 14:23:02
オリジナル
992 人が閲覧しました

Inline View Method and the Correlated Subquery in SQL

インライン ビュー メソッドと相関サブクエリ メソッドの両方のメソッドの実行フローを詳しく見てみましょう。これらのクエリの実行を段階的に理解することは、望ましい結果を得るために SQL が各シナリオをどのように処理するかを明確にするのに役立ちます。

  1. インラインビューメソッドの実行フロー

インライン ビュー メソッドは、FROM 句でサブクエリを使用して一時的な結果セット (インライン ビュー) を作成し、それを外部クエリで処理します。

クエリ:

最高給与として部門 ID、MAX(給与) を選択
から (
部門 ID、給与を選択
従業員より
) AS InlineView
部門 ID によるグループ;

実行手順:

  1. 内部クエリの実行 (インラインビュー):

内部クエリ (SELECTDepartmentId, Salary FROM Employee) が最初に実行されます。

Employee テーブルからDepartmentId 列と Salary 列を選択します。

このステップでは基本的に、Employee テーブルのすべての行を含む、DepartmentId 列と Salary 列のみを含む一時的な結果セット (インライン ビュー) を作成します。

内部クエリのサンプル結果:

  1. 外部クエリの実行 (集計とグループ化):

インライン ビュー (一時的な結果セット) が作成された後、外部クエリはこの結果セットを取得し、MAX(Salary) 関数を使用して集計を実行します。

GROUP BYDepartmentId により、各部門の最大給与が確実に計算されます。

外部クエリはインライン ビューの行をスキャンし、DepartmentId に基づいて行をグループ化します。次に、各グループの最大給与を計算します。

  1. 結果を返す:

クエリは各部門の最高給与を返します。

最終結果:

実行フローの概要:

  1. 内部クエリを実行してインライン ビューを作成します。

  2. 外側のクエリは (MAX を使用して) 結果を集計し、DepartmentId ごとに結果をグループ化します。

  3. 最終結果を返します。


  1. 相関サブクエリメソッドの実行フロー

相関サブクエリ方式では、内部サブクエリが外部クエリの行ごとに実行されるため、より動的になりますが、インライン ビュー方式よりも遅くなる可能性があります。

クエリ:

部門 ID、従業員 ID、給与を最高給与として選択します
社員 e より
WHERE 給与 = (
SELECT MAX(給与)
従業員より
WHERE 部門 ID = e.DepartmentId
);

実行手順:

  1. 外部クエリの実行 (行ごとの処理):

外側のクエリは、Employee テーブルから各行を読み取ることから始まります。

このクエリは、Employee テーブルの各行について、DepartmentId、EmployeeId、Salary を取得します。

外部クエリからの行ごとの処理のサンプル:

  1. 内部クエリの実行 (相関サブクエリ):

外部クエリの各行に対して、内部クエリ (SELECT MAX(Salary) FROM Employee WHEREDepartmentId = e.DepartmentId) が実行されます。

サブクエリは、現在の行のDepartmentIdに対応する部門の最高給与を計算します。

外部クエリとサブクエリの間の相関関係は、DepartmentId 条件 (WHEREDepartmentId = e.DepartmentId) を通じて発生します。

例:

EmployeeId = 1 の行の場合、サブクエリは、DepartmentId = 101 の最大給与 (6000) を計算します。

EmployeeId = 3 の行の場合、サブクエリは、DepartmentId = 102 の最大給与 (7500) を計算します。

各行のサブクエリの実行例:

  1. 行のフィルタリング:

対応するDepartmentIdの最大給与を計算した後、外部クエリは現在の行のSalaryとサブクエリによって返された最大給与を比較します。

給与が部門の最高給与と一致する場合、行は保持されます。

一致しない行はフィルターで除外されます。

例:

EmployeeId = 2 の行は、その給与 6000 が部門 101 の最高給与と一致するため、保持されます。

EmployeeId = 1 の行は、給与 5000 が部門 101 の最高給与よりも低いため、フィルターで除外されます。

  1. 結果を返す:

外側のクエリは、従業員の給与が部門の最高給与と一致する行を返します。

最終結果:

実行フローの概要:

  1. 外側のクエリの行ごとに、内側の相関サブクエリを実行します。

  2. サブクエリは、現在のDepartmentIdの最大給与を計算します。

  3. 従業員の給与とサブクエリの結果を比較します。

  4. 従業員の給与が部門の最高額と一致する行をフィルタリングして返します。


실행 흐름의 주요 차이점:


성능 고려 사항:

인라인 뷰 방식은 자세한 직원 정보 없이 부서별 최고 연봉만 확인할 때 더 효율적입니다. 데이터에 대한 단일 전달로 집계를 수행합니다.

상관 하위 쿼리 방법은 외부 쿼리의 모든 행에 대해 하위 쿼리를 실행하여 잠재적으로 중복 계산이 많이 발생하므로 대규모 데이터세트의 경우 속도가 느려질 수 있습니다. 그러나 부서의 최고 급여와 자세한 직원 정보(예: EmployeeId, 이름)를 모두 검색할 수 있습니다.

以上がSQL のインライン ビュー メソッドと相関サブクエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!