首頁 > 資料庫 > mysql教程 > 了解 SQL 子查詢:帶有範例的完整指南

了解 SQL 子查詢:帶有範例的完整指南

Linda Hamilton
發布: 2024-12-27 01:18:12
原創
336 人瀏覽過

Understanding SQL Subqueries: A Complete Guide with Examples

什麼是 SQL 中的子查詢?

子查詢,也稱為內部查詢巢狀查詢,是另一個SQL查詢中的查詢。它包含在括號內並首先執行以提供外部查詢用於進一步處理的結果。


子查詢的類型

  1. 單行子查詢
    • 傳回一行作為結果。
    • 通常與 =、 等比較運算子一起使用。

範例

找出薪水最高的員工姓名:

   SELECT Name
   FROM Employees
   WHERE Salary = (SELECT MAX(Salary) FROM Employees);
登入後複製
登入後複製
  1. 多行子查詢
    • 傳回多行結果。
    • 與 IN、ANY、ALL 等運算子一起使用。

範例

尋找在超過 5 名成員的部門工作的員工:

   SELECT Name
   FROM Employees
   WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE Members > 5);
登入後複製
登入後複製
  1. 相關子查詢
    • 引用外部查詢中的欄位。
    • 對外部查詢的每一行重複執行。

範例

找出收入高於部門平均薪資的員工:

   SELECT Name, Salary
   FROM Employees E
   WHERE Salary > (SELECT AVG(Salary) FROM Employees WHERE DepartmentID = E.DepartmentID);
登入後複製
登入後複製
  1. 巢狀子查詢
    • 其中包含另一個子查詢。

範例

尋找員工平均薪資超過 50,000 美元的部門:

   SELECT Name
   FROM Employees
   WHERE Salary = (SELECT MAX(Salary) FROM Employees);
登入後複製
登入後複製

子查詢的用例

  1. 過濾資料: 使用子查詢根據特定條件過濾行。
   SELECT Name
   FROM Employees
   WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE Members > 5);
登入後複製
登入後複製
  1. 數據對比: 使用子查詢比較表之間的資料。
   SELECT Name, Salary
   FROM Employees E
   WHERE Salary > (SELECT AVG(Salary) FROM Employees WHERE DepartmentID = E.DepartmentID);
登入後複製
登入後複製
  1. 資料聚合: 透過巢狀查詢執行高級聚合。
   SELECT DepartmentName
   FROM Departments
   WHERE DepartmentID IN (
       SELECT DepartmentID
       FROM Employees
       WHERE Salary > (SELECT AVG(Salary) FROM Employees)
   );
登入後複製
  1. 動態更新: 基於子查詢動態更新或刪除行。
   SELECT * FROM Products WHERE Price > (SELECT AVG(Price) FROM Products);
登入後複製

子查詢的優點

  1. 模組化:將複雜的查詢分解為更小的、可管理的部分。
  2. 可讀性:在許多情況下讓查詢邏輯更加清晰。
  3. 靈活性:可用於 SELECT、WHERE、FROM 和 HAVING 子句。

限制

  1. 效能:子查詢,尤其是相關子查詢,在執行多次時可能會變慢。
  2. 複雜性:深度嵌套的子查詢可能會變得難以閱讀和調試。
  3. 最佳化挑戰:有時,透過連接可以更有效地實現相同的結果。

結論

子查詢是 SQL 中的一個強大工具,用於將複雜邏輯分解為可管理的部分,實現動態資料分析並促進資料操作。然而,了解何時使用子查詢與連接等替代方案對於獲得最佳查詢效能至關重要。

以上是了解 SQL 子查詢:帶有範例的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板