oracle子查詢

賀滿發表於2014-02-18

子查詢概念 :當一個查詢的結果是另一個查詢的條件時,稱之為子查詢。

使用子查詢注意事項:

         子查詢可以巢狀多層

         子查詢需要圓括號()括起來

子查詢語法:

SELECT     select_list

FROM       table

WHERE    expr operator

                           (SELECT    select_list

                         FROM                  table);

子查詢 (內查詢) 在主查詢之前一次執行完成。

子查詢的結果被主查詢使用 (外查詢)。

舉例:查詢員工的工資大於JONES的員工資訊

分析過程如下:

首先:查詢JONES的員工工資是多少 :結果2975

SQL> select sal from emp where ename='JONES';

實際上我們要查詢的是:薪資大於2975的員工的資訊寫法如下:

SQL> select * from emp where sal>2975;

//綜合以上寫出子查詢的結果如下:

SQL> select * from emp where sal>(select sal from emp where ename='JONES');

注意:

子查詢要包含在括號內

將子查詢放在比較條件的右側

 

根據查詢的結果(內部巢狀查詢的結果)把子查詢的型別分為單行子查詢與多行子查詢,

   注意:

l  單行操作符對應單行子查詢,多行操作符對應多行子查詢。

單行操作符

>、>=、 <、 <= 、<>、=

舉例:

//查詢編號7876相同職位的員工資訊 並且薪資大於編號為7521的薪資的員工資訊

SQL> select * from emp where job=( select job from emp where empno=7876) and sal>( select sal from emp where empno=7521);

//子查詢含有組函式

SQL> select * from emp where sal>(select avg(nvl(sal,0)) from emp);

//子查詢含有having子句查詢部門的最小工資大於20號部門最小工資的部門號及最小工資數

SQL> select deptno,min(sal) from emp group by deptno having min(sal)>( select min(sal) from emp where deptno=20);

 

備註:子查詢可以返回空行 沒要查詢到結果是可以的。

 

多行子查詢

l   返回多行。

l  使用多行比較操作符。

操作符如下圖:

操作符

描述

In

等於列表中的任何一個

Any

子查詢返回的任意一個值比較 相同還有some

All

和子查詢返回的所有值比較  

Exists

 

 

//查詢薪水小於工作崗位CLERK的任何一個薪資的員工資訊並且不包含工作崗位為CLERK的員工資訊

SQL> select * from emp where sal < any (select sal from emp where job='CLERK') and job<>'CLERK';

//all與所有值比較 >all 代表的是大於查詢結果的最大值

SQL> select * from emp where sal > all (select sal from emp where job='CLERK') and job<>'CLERK';

//查詢崗位與部門編號為10相同的員工資訊 不包含自己。

SQL> select * from emp where job in(select job from emp where deptno=10) and deptno<>10;

 

 

原文:http://blog.csdn.net/java958199586/article/details/7350730

相關文章