中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle系列:(14)子查詢

發布時間:2020-07-18 16:10:13 來源:網絡 閱讀:632 作者:lsieun 欄目:關系型數據庫



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


查詢條件已知的問題:例如:查詢工資為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'
);

Oracle系列:(14)子查詢


查詢'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'
);

Oracle系列:(14)子查詢



子查詢細節:

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);

Oracle系列:(14)子查詢



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

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

      select min(sal) from emp;

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

      select * from emp where sal = 800;

子查詢:

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

Oracle系列:(14)子查詢



查詢部門名為'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')
);

Oracle系列:(14)子查詢


查詢工資比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
);

Oracle系列:(14)子查詢


查詢工資比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
);

Oracle系列:(14)子查詢



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


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

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


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

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


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


多表查詢-->子查詢

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



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠来县| 双峰县| 丹寨县| 武功县| 家居| 贵阳市| 万宁市| 香格里拉县| 金秀| 甘孜| 黑龙江省| 抚顺市| 石嘴山市| 衡山县| 屏东市| 台州市| 三台县| 上杭县| 通城县| 和田县| 视频| 孟州市| 海丰县| 芒康县| 崇仁县| 旬邑县| 云安县| 徐汇区| 大名县| 柯坪县| 兴仁县| 上饶市| 承德市| 宝兴县| 浏阳市| 临猗县| 行唐县| 板桥市| 凤庆县| 米脂县| 景德镇市|