首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 子查詢嵌套誤區分析:內外層約束關係實測驗證

     編輯:MySQL 資料庫相關知識

常見誤解

「子查詢的 WHERE 條件與外層無關,可獨立理解。」
**錯誤**——相關子查詢中,內層可引用外層欄位,形成逐行求值邏輯。

實測驗證(截圖來源)

截圖1 截圖2

核心區別

類型特徵執行邏輯
非相關子查詢內層無引用外層欄位先執行內層得結果集,外層用 IN/= 比較
相關子查詢內層引用外層欄位(如 WHERE inner.col = outer.col)外層每行觸發一次內層執行
EXISTS 子查詢只關心是否存在找到第一匹配即停止,常比 IN 快

範例對比


-- 非相關:部門平均薪資
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp);

-- 相關:高於自己部門平均薪資
SELECT * FROM emp e1
WHERE sal > (SELECT AVG(sal) FROM emp e2 WHERE e2.deptno = e1.deptno);

-- EXISTS:有下屬的主管
SELECT * FROM emp e1
WHERE EXISTS (SELECT 1 FROM emp e2 WHERE e2.mgr = e1.empno);

可讀性建議

  • 雖然相關子查詢內外層有依賴,**閱讀時仍建議視為獨立邏輯單元**,用縮排、別名(e1/e2)明確區分作用域。
  • 複雜相關子查詢可改寫為 JOIN 或 WITH (CTE) 提升可讀與效能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved