關聯子查詢與非關聯子查詢區別


子查詢可區分為關聯子查詢和非關聯子查詢,他們和外層查詢之間的執行順序和關系是不同的。

1. 關聯子查詢:

  在關聯子查詢中,對於外部查詢返回的每一行數據,內部查詢都要執行一次。另外,關聯子查詢的信息流是雙向的,外部查詢的每行數據傳遞一個值給子查詢,然后子查詢為每一行數據執行一次並返回它的記錄,之后外部查詢根據返回的記錄做出決策。

  select * from dept d where exists(select * from emp e where e.deptno = d.deptno);

特點:

1、先執行外層查詢

2、再執行內層查詢

2. 非關聯子查詢:

  非相關子查詢是獨立於外部查詢的子查詢,子查詢執行完畢后將值傳遞給外部查詢。

  select * from emp where sal = (select max(sal) from emp);

特點:

1、先執行內層查詢

2、再執行外層查詢

3.子查詢結果的三種情況:

1) 子查詢的結果是單行單列 

  子查詢結果只要是單行單列, 肯定在 WHERE 后面作為條件, 父查詢使用: 比較運算符, 如: > <<>=等

  

2) 子查詢的結果是多行單列

  子查詢結果是單例多行,結果集類似於一個數組,父查詢使用 IN 運算符

  

3) 子查詢的結果是多行多列 

  子查詢結果只要是多列,肯定在 FROM 后面作為表

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM