Oracle基礎要點:[7]子查詢?

Tags: 基礎, 要點,

子查詢

語法結構:

select 查詢列

from 表名

where 列名 操作符 (select 查詢列

from 表名)

select語句中可以巢狀其它的select語句參與比較和運算。

裡層:子查詢括號內的查詢叫做子查詢或內部查詢

外層:主查詢外面的查詢叫做主查詢或者外部查詢

注意:

子查詢需要寫在括號中

子查詢需要寫在運算子的右端

子查詢可以寫在where,having,from子句中

子查詢通常不寫在order by字句

子查詢的種類:

單行子查詢:子查詢返回的記錄只有一條 返回單行單列 > < >= <= <>

多行子查詢:子查詢返回記錄的條數可以是一條或多條

All:

Any 表示任意的,比子查詢返回的任意個結果小即可

>any比裡面的最小的大

in 比子查詢返回的任意一個結果相等

多列子查詢:返回多列

分類:

非關聯子查詢

執行順序:先執行子查詢,返回結果後,在進行主查詢

即必須先執行完成內層查詢之後,外層查詢才能介入

關聯子查詢

執行步驟:1)主查詢得到一條記錄並將其傳入到內部查詢

2)內部查詢基於傳入的值查詢

3)內部查詢從其結果中把值傳回到外部查詢,外部查詢使用這些值

來完成其處理

注意:a.在關聯子查詢中,對於外部查詢返回的每一行資料,內部查詢都要執行一次

b.在關聯子查詢中資訊是雙向的

c.外部查詢的每行資料傳遞一個值給子查詢,然後子查詢為每一行資料

執行一次並返回它的記錄,外部查詢根據返回的記錄做出決策

例如:select ename

from emp e

where hiredate

from emp

where e.ename=ename

);

每個部門拿最高薪水的是誰?

select ename,job,deptnmo

from emp

where (deptno,salary) in(select deptno max(salary)

from emp

where deptno is not null

group by deptno

)

對於exist和in的使用方法:

a.in是子查詢作為驅動表,外面的表為被驅動表,所以適用於子查詢結果集

小於外面的結果集的情況。一般用於非關聯子查詢

b.exists是外面的表驅動表,子查詢裡面的為被驅動表,故適用於外面的表結果集

小於子查詢結果集的情況。一般用於關聯子查詢

select ename

from emp

where exists(

select * from dept

where a.id=b.id//必須先找出emp中符合條件的記錄

必須先執行外層迴圈

)

關聯子查詢和非關聯子查詢的不同:

a.對於關聯子查詢,必須先執行外層查詢,接著對所有通過過濾條件的記錄

執行內層查詢,外層查詢和內層查詢相互依賴,因為外層迴圈會把資料傳遞給內層查詢

b非關聯子查詢即必須先執行完成內層查詢之後,外層查詢才能介入

Oracle基礎要點 (共8篇) 上一篇:組函式 下一篇:表連線

基礎, 要點,
相關問題答案