Oracle 的关联子查询(correlated subquery) 简介.
相信 接觸過 ocp考題既, 都會見到 correlated subquery的字眼.
correlated subquery的中文名稱就是相關子查詢呢?
1. 什么是子查詢
這個很簡單,? 子查詢就是嵌套在主查詢里的查詢了.
例如, 在scott 模式下我想查找所有比Allen 工資高的員工
我們可以寫成這樣:
select a.* from emp a, emp b where a.sal > b.sal and b.ename = 'ALLEN'
當然上面的查詢語句自不過是簡單的連接查詢, 并沒有用到子查詢.
寫成這樣就是子查詢了:
select * from emp where sal > ( select sal from emp where ename = 'ALLEN')第二行where 條件中出現了另1個子查詢.? 反而令sql語句更加容易理解了.
2. 什么是非關聯子查詢
而子查詢也可以分成關聯子查詢和非關聯子查詢,? 上面那條sql 語句就是非關聯子查詢.
所謂非關聯子查詢就是 指子查詢可以脫離主查詢獨立執行.
再舉個例子:
我想找出每個部門中最高工資的人.
sql語句可以寫成如下:
其中的 子查詢 select deptno, max(sal) from emp group by deptno
是可以獨立執行的.
而且對于整個查詢來講, 是執行一次子查詢先, 再執行主查詢.
3. 什么是關聯子查詢
所謂關聯子查詢就是指子查詢與主查詢之間有條件關聯,? 不能獨自執行.
看回上面的需求, 我們換一種寫法:
select a.deptno, a.* from emp a where a.sal = (select max(b.sal) from emp b where b.deptno = a.deptno)
上面的例子就是用到關聯子查詢了,? 其中的子查詢因為條件關聯了主查詢的表. 所以子查詢不能單獨執行.
對于關聯子查詢來講,? 是自外到內的, 先執行外查詢,.
例如上面的例子,?? 對于主表a來間,? 對于每1個deptno,? 都要執行一次子查詢.
關聯子查詢還有1個限制, 就是子查詢不能返回多于1行的數據.
否則會出現如下的錯誤信息:
ORA-01427: 單行子查詢返回多個行
01427. 00000 -? "single-row subquery returns more than one row"
*Cause:?? ?
*Action:
總結
以上是生活随笔為你收集整理的Oracle 的关联子查询(correlated subquery) 简介.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle connet by pri
- 下一篇: Oracle 同义词(synonym)