您好,登錄后才能下訂單哦!
子查詢的作用:查詢條件未知的事物
查詢條件已知的問題:例如:查詢工資為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' );
查詢'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' );
子查詢細節:
1)子查詢與父查詢可以針對同一張表
2)子查詢與父查詢可以針對不同張表
3) 子查詢與父查詢在傳統參數時,數量要相同
4) 子查詢與父查詢在傳統參數時,類型要相同
5) 子查詢與父查詢在傳統參數時,含義要相同
查詢部門名為'SALES'的員工信息(方式二:多表查詢)
select emp.* from dept,emp where (dept.deptno=emp.deptno) and (dept.dname='SALES');
查詢每個員工編號,姓名,部門名,工資等級(三表查詢,這三張表并無外健關聯)
select e.empno,e.ename,d.dname,s.grade from emp e,dept d,salgrade s where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);
查詢工資最低的員工信息(單行子查詢,使用=號)
第一:查詢出工資最低是多少?
select min(sal) from emp;
第二:查詢工資為800的員工信息?
select * from emp where sal = 800;
子查詢:
select * from emp where sal = ( select min(sal) from emp );
查詢部門名為'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') );
查詢工資比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 );
查詢工資比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 );
注意:不容易理解的幾個概念 單行函數:輸入一個參數,輸出一個結果 多行函數:掃描多個參數,輸出一個結果 單行子查詢:子查詢只會返回一個結果,例如:800,父查詢用=/<>/>=/<=這些符號來比較 多行子查詢:子查詢會返回多于一個結果,例如:30,20,父查詢用in/any/all這些符號來比較 |
當多表查詢,子查詢同時能解決問題時,按如下優先方案選擇: 多表查詢-->子查詢 注意:上述結果不是說多表查詢可以替代子查詢,某些情況下,只能用子查詢解決,例如:oracle分頁 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。