當乙個查詢結果是另乙個查詢的條件的時候,那麼就稱為子查詢,子查詢是在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...