Oracle系列:(14)子查詢

來源:互聯網
上載者:User

標籤:oracle



子查詢的作用:查詢條件未知的事物


查詢條件已知的問題:例如:查詢工資為800的員工資訊

查詢條件未知的問題:例如:查詢工資為20號部門平均工資的員工資訊

一個條件未知的問題,可以分解為多個條件已知的問題


查詢工資比WARD高的員工資訊

第一:查詢WARD的工資?

      select sal from emp where ename = ‘WARD‘;


第二:查詢工資比1250高的員工資訊?

      select * from emp where sal > 1250;


子查詢:

select * from emp where sal > (    select sal     from emp     where ename = ‘WARD‘);

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/86/FC/wKiom1fQFhvDthZiAAA7NWL5bUI147.png" title="001.PNG" alt="wKiom1fQFhvDthZiAAA7NWL5bUI147.png" />


查詢‘SALES‘部門的員工資訊(方式一:子查詢)


第一:查詢部門名為‘SALES‘的編號?

      select deptno from dept where dname = ‘SALES‘;

第二:查詢部門號為30的員工資訊? 

      select * from emp where deptno = 30;

子查詢:

select * from emp where deptno = (  select deptno   from dept   where dname = ‘SALES‘);

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/86/FC/wKiom1fQFs7jyI1dAAAyJl5t8Ec378.png" title="002.PNG" alt="wKiom1fQFs7jyI1dAAAyJl5t8Ec378.png" />



子查詢細節:

1)子查詢與父查詢可以針對同一張表 

2)子查詢與父查詢可以針對不同張表

3) 子查詢與父查詢在傳統參數時,數量要相同

4) 子查詢與父查詢在傳統參數時,類型要相同

5) 子查詢與父查詢在傳統參數時,含義要相同


查詢部門名為‘SALES‘的員工資訊(方式二:多表查詢)

select emp.*from dept,empwhere (dept.deptno=emp.deptno) and (dept.dname=‘SALES‘);


查詢每個員工編號,姓名,部門名,工資等級(三表查詢,這三張表並無外健關聯)

select e.empno,e.ename,d.dname,s.gradefrom emp e,dept d,salgrade swhere (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/86/FA/wKioL1fQF5uAqQITAAAvVzdlVqs120.png" title="003.PNG" alt="wKioL1fQF5uAqQITAAAvVzdlVqs120.png" />



查詢工資最低的員工資訊(單行子查詢,使用=號)

第一:查詢出工資最低是多少?

      select min(sal) from emp;

第二:查詢工資為800的員工資訊?

      select * from emp where sal = 800;

子查詢:

select * from emp where sal = (    select min(sal)     from emp);

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/86/FA/wKioL1fQGCuw4oBOAAAWmYMUrTw135.png" title="004.PNG" alt="wKioL1fQGCuw4oBOAAAWmYMUrTw135.png" />



查詢部門名為‘ACCOUNTING‘或‘SALES‘的員工資訊(多行子查詢,使用in關鍵字)

第一:查詢部門名為‘ACCOUNTING‘或‘SALES‘的部門編號?

      select deptno from dept where dname in (‘ACCOUNTING‘,‘SALES‘);

第二:查詢部門號為10或30號的員工資訊?

      select * from emp where deptno in (10,30);

子查詢:

select * from emp where deptno in (   select deptno    from dept    where dname in (‘ACCOUNTING‘,‘SALES‘));

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/86/FC/wKiom1fQGNvgG6CGAAA-W8NhKUQ045.png" title="005.PNG" alt="wKiom1fQGNvgG6CGAAA-W8NhKUQ045.png" />


查詢工資比20號部門【任意any】一個員工工資【低<】的員工資訊(多行子查詢,使用any關鍵字) 

第一:查詢20號部門的所有工資?

      select sal from emp where deptno = 20;

第二:查詢工資比(800,2975,3000,1100,3000)任意一個低的員工資訊?

      select * from emp where sal < any (800,2975,3000,1100,3000);

  

在oracle看來,<any就等於<集合中最大的那個值

子查詢:

select * from emp where sal <any (    select sal     from emp     where deptno = 20);

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/86/FC/wKiom1fQGc-yVRCwAABANu9S3pc138.png" title="006.PNG" alt="wKiom1fQGc-yVRCwAABANu9S3pc138.png" />


查詢工資比30號部門【所有all】員工【低<】的員工資訊(多行子查詢,使用all關鍵字) 


第一:查詢出30部門所有員工的工資?    

      select sal from emp where deptno = 30;

第二:查詢工資比(1600,1250,1250,2850,1500,950)中所有的工資都低的員工資訊?

      select * from emp where sal <all (1600,1250,1250,2850,1500,950);

子查詢:

select * from emp where sal <all (    select sal     from emp     where deptno = 30);

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/86/FC/wKiom1fQGnLxruylAAARle7auJY383.png" title="007.PNG" alt="wKiom1fQGnLxruylAAARle7auJY383.png" />



注意:不容易理解的幾個概念


單行函數:輸入一個參數,輸出一個結果

多行函數:掃描多個參數,輸出一個結果


單行子查詢:子查詢只會返回一個結果,例如:800,父查詢用=/<>/>=/<=這些符號來比較

多行子查詢:子查詢會返回多於一個結果,例如:30,20,父查詢用in/any/all這些符號來比較


當多表查詢,子查詢同時能解決問題時,按如下優先方案選擇:


多表查詢-->子查詢

注意:上述結果不是說多表查詢可以替代子查詢,某些情況下,只能用子查詢解決,例如:oracle分頁



Oracle系列:(14)子查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.