Oracle子查詢詳解 |
發(fā)布時間: 2012/9/3 17:40:00 |
子查詢概念 :當(dāng)一個查詢的結(jié)果是另一個查詢的條件時,稱之為子查詢。 使用子查詢注意事項: 子查詢可以嵌套多層 子查詢需要圓括號()括起來-
SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); l 子查詢 (內(nèi)查詢) 在主查詢之前一次執(zhí)行完成。 l 子查詢的結(jié)果被主查詢使用 (外查詢)。 舉例:查詢員工的工資大于JONES的員工信息 分析過程如下: 首先:查詢JONES的員工工資是多少 :結(jié)果2975 SQL> select sal from emp where ename='JONES'; 實(shí)際上我們要查詢的是:薪資大于2975的員工的信息寫法如下: SQL> select * from emp where sal>2975; //綜合以上寫出子查詢的結(jié)果如下: SQL> select * from emp where sal>(select sal from emp where ename='JONES'); 注意: l 子查詢要包含在括號內(nèi)。 l 將子查詢放在比較條件的右側(cè)。 根據(jù)查詢的結(jié)果(內(nèi)部嵌套查詢的結(jié)果)把子查詢的類型分為單行子查詢與多行子查詢, 注意: l 單行操作符對應(yīng)單行子查詢,多行操作符對應(yīng)多行子查詢。 單行操作符 >、>=、 <、 <= 、<>、= 舉例: //查詢編號7876相同職位的員工信息 并且薪資大于編號為7521的薪資的員工信息 SQL> select * from emp where job=( select job from emp where empno=7876) and sal>( select sal from emp where empno=7521); //子查詢含有組函數(shù) SQL> select * from emp where sal>(select avg(nvl(sal,0)) from emp); //子查詢含有having子句查詢部門的最小工資大于20號部門最小工資的部門號及最小工資數(shù) SQL> select deptno,min(sal) from emp group by deptno having min(sal)>( select min(sal) from emp where deptno=20);
備注:子查詢可以返回空行 沒要查詢到結(jié)果是可以的。
多行子查詢 l 返回多行。 l 使用多行比較操作符。 操作符如下圖: 操作符
//查詢薪水小于工作崗位CLERK的任何一個薪資的員工信息并且不包含工作崗位為CLERK的員工信息 SQL> select * from emp where sal < any (select sal from emp where job='CLERK') and job<>'CLERK'; //all與所有值比較 >all 代表的是大于查詢結(jié)果的最大值 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;
本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |