oracle子查詢詳解

2021-08-19 06:40:23 字數 1760 閱讀 3890

當乙個查詢結果是另乙個查詢的條件的時候,那麼就稱為子查詢,子查詢是在sql語句內的另外一條select語句。

在select、insert、update或delete命令中只要是表示式的地方都可以包含子查詢,子查詢甚至可以包含在另外乙個子查詢中,以便完成更為複雜的查詢。下面通過乙個例項來了解一下子查詢。

例項 查詢部門名稱為research的員工資訊

在員工表emp中查詢部門名稱(dname)為research的員工資訊,具體**如下。

[sql]

view plain

copy

01  

select

empno,ename,jobfrom emp  

02  where

deptno=(

select

deptno fromdept  

03  where

dname=

'research'

);  

通過sqldeveloper輸入,查詢結果如圖7.1所示。

圖7.1  顯示部門名稱為research的員工資訊

因為題目要求查詢的是部門名稱為research的員工資訊,但是在員工表emp中並沒有部門名稱(dname)字段,只有部門編號(deptno)字段,那麼只要知道部門名稱為research的編號就可以了,這個要求很簡單,可以通過部門表dept來查詢,**如下。

[sql]

view plain

copy

01  

select

deptno 

from

dept  

02  where

dname=

'research'

查詢結果如圖7.2所示,通過此語句就可以得到部門編號,為20。

圖7.2  部門名稱為research的部門編號

現在題目可以簡化為查詢部門編號為20的員工資訊,那麼**如下。

[sql]

view plain

copy

01  

select

empno,ename,jobfrom emp  

02  where

deptno=20;  

查詢結果如圖7.1所示。

如果把這兩條查詢語句連起來,就構成了子查詢。如要注意的是,內層查詢稱為子查詢,外層查詢稱為外查詢,如圖7.3所示。

圖7.3  子查詢和外查詢

說明:本例項的需求也可以通過多表關聯查詢來實現,即可以使用如下**來替換上面的**。將下面的**和例項01中的**進行對比,可以看出,相比多表關聯查詢,子查詢的使用更加靈活、功能更強大,而且更容易理解。

[sql]

view plain

copy

01  

select

empno,ename,job  

02  from

emp 

join

dept onemp.deptno=dept.deptno  

03  wheredept.dname = 'research'

;  

Oracle的查詢 子查詢

子查詢 子查詢返回乙個值 查詢出工資和scott一樣的員工資訊 select from emp where sal in select sal from emp where ename scott 子查詢返回乙個集合 查詢出工資和10號部門任意員工一樣的員工資訊 select from emp wh...

Oracle的子查詢

oracle的子查詢分為兩種 一種是相關子查詢,一種是非相關子查詢。主要區別就是相關子查詢用到了外查詢結果的字段。一般來說,相關子查詢不能單獨執行,非相關子查詢可以單獨執行。掃瞄外查詢的第一條記錄 掃瞄子查詢,並將第一條記錄的對應值傳給子查詢,由此計算出子查詢的結果 根據子查詢的結果,返回外查詢的結...

mysql子查詢教程 MySQL子查詢詳解

子查詢指乙個查詢語句巢狀在另乙個查詢語句內部的查詢,這個特性從 mysql 4.1 開始引入,在 select 子句中先計算子查詢,子查詢結果作為外層另乙個查詢的過濾條件,查詢可以基於乙個表或者多個表。子查詢中常用的操作符有 any some all in 和 exists。子查詢可以新增到 sel...