首頁  >  文章  >  web前端  >  SQL中的內聯視圖方法和相關子查詢

SQL中的內聯視圖方法和相關子查詢

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-04 14:23:02996瀏覽

Inline View Method and the Correlated Subquery in SQL

讓我們深入研究兩種方法的執行流程:內嵌視圖方法和相關子查詢方法。了解這些查詢的逐步執行將有助於闡明 SQL 如何處理每個場景以獲得所需的結果。

  1. 內嵌視圖方法執行流程

內嵌視圖方法使用 FROM 子句中的子查詢建立臨時結果集(內聯視圖),然後在外部查詢中處理。

查詢:

選擇部門 ID,MAX(薪水)為最高薪水
來自 (
選擇部門 ID、薪資
來自員工
) AS 內聯視圖
按部門 ID 分組;

執行步驟:

  1. 內部查詢執行(內嵌視圖):

先執行內部查詢(SELECT DepartmentId, Salary FROM Employee)。

它從 Employee 表中選擇 DepartmentId 和 Salary 欄位。

此步驟本質上建立一個臨時結果集(內聯視圖),其中包括 Employee 表中的所有行,但僅包含 DepartmentId 和 Salary 列。

內部查詢結果範例:

  1. 外部查詢執行(聚合和分組):

建立內嵌視圖(暫存結果集)後,外部查詢會取得該結果集並使用 MAX(Salary) 函數進行聚合。

GROUP BY DepartmentId 確保計算每個部門的最高工資。

外部查詢掃描內嵌檢視中的行並根據 DepartmentId 對行進行分組。然後,它計算每個組的最高工資。

  1. 回傳結果:

查詢返回各部門的最高薪資。

最終結果:

執行流程摘要:

  1. 執行內部查詢以建立內聯視圖。

  2. 外部查詢聚合(使用 MAX)並按 DepartmentId 分組結果。

  3. 傳回最終結果。


  1. 相關子查詢方法執行流程

在相關子查詢方法中,內部子查詢針對外部查詢中的每一行執行,使其更加動態,但可能比內聯視圖方法慢。

查詢:

選擇部門 ID、員工 ID、薪資 AS HighestSalary
來自員工 e
工資 = (
選擇最高(薪資)
來自員工
WHERE DepartmentId = e.DepartmentId
);

執行步驟:

  1. 外部查詢執行(逐行處理):

外部查詢首先讀取 Employee 表中的每一行。

對於 Employee 表中的每一行,查詢都會檢索 DepartmentId、EmployeeId 和 Salary。

外部查詢的逐行處理範例:

  1. 內部查詢執行(相關子查詢):

對於外部查詢中的每一行,都會執行內部查詢 (SELECT MAX(Salary) FROM Employee WHERE DepartmentId = e.DepartmentId)。

子查詢計算目前行DepartmentId對應的部門的最高工資。

外查詢和子查詢之間的關聯是透過 DepartmentId 條件進行的 (WHERE DepartmentId = 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. 過濾並傳回員工薪資與其部門最高薪資相符的行。


実行フローの主な違い:


パフォーマンスに関する考慮事項:

詳細な従業員情報を必要とせず、各部門の最高給与のみに関心がある場合は、インライン表示方法がより効率的です。データの単一パスで集計を実行します。

相関サブクエリ方式は、外部クエリのすべての行に対してサブクエリを実行し、多くの冗長な計算が発生する可能性があるため、大規模なデータセットでは速度が低下する可能性があります。ただし、部門の最高給与と詳細な従業員情報 (従業員 ID、名前など) の両方を取得できます。

以上是SQL中的內聯視圖方法和相關子查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn