Oracle 子查詢和分頁查詢

一、子查詢

子查詢:在一個查詢的內部還包括另一個查詢,則此查詢稱爲子查詢,Sql的任何位置都可以加入子查詢

  • 範例:查詢比 7654 工資高的僱員
    分析:查詢出 7654 員工的工資是多少,把它作爲條件
    在這裏插入圖片描述

子查詢在操作中有三類:

單列子查詢:返回的結果是一列的一個內容
單行子查詢:返回多個列,有可能是一個完整的記錄
多行子查詢:返回多條記錄

  • 範例:查詢出比僱員 7654 的工資高,同時從事和 7788 的工作一樣的員工
    在這裏插入圖片描述
  • 範例:要求查詢每個部門的最低工資和最低工資的僱員和部門名稱
    在這裏插入圖片描述
---子查詢返回一個值
---查詢出工資和SCOTT一樣的員工信息
select * from emp where sal in
(select sal from emp where ename = 'SCOTT')
---子查詢返回一個集合
---查詢出工資和10號部門任意員工一樣的員工信息
select * from emp where sal in
(select sal from emp where deptno = 10);
---子查詢返回一張表
---查詢出每個部門最低工資,和最低工資員工姓名,和該員工所在部門名稱
---1,先查詢出每個部門最低工資
select deptno, min(sal) msal
from emp 
group by deptno;
---2,三表聯查,得到最終結果。
select t.deptno, t.msal, e.ename, d.dname
from (select deptno, min(sal) msal
      from emp 
      group by deptno) t, emp e, dept d
where t.deptno = e.deptno
and t.msal = e.sal
and e.deptno = d.deptno;

二、Rownum 和分頁查詢

ROWNUM 表示行號,實際上此是一個列,但是這個列是一個僞列,此列可以在每張表中出現。

rownum 行號:當我們做select操作的時候,每查詢出一行記錄,就會在該行上加上一個行號。
行號從 1 開始,依次遞增,不能跳着走。
----排序操作會影響 rownum 的順序
select rownum, e.* from emp e order by e.sal desc
----如果涉及到排序,但是還要使用rownum的話,我們可以再次嵌套查詢。
select rownum, t.* from(
select rownum, e.* from emp e order by e.sal desc) t;
  • 範例:查詢 emp 錶帶有 rownum 列
    在這裏插入圖片描述
    我們可以根據 rownum 來取結果集的前幾行,比如前 5 行
    在這裏插入圖片描述
    但是我們不能取到中間幾行,因爲rownum不支持大於號,只支持小於號,如果想實現我們的
    需求怎麼辦呢?答案是使用子查詢,也正是oracle分頁的做法。
第一種寫法:
select *
from 
(select rownum rm, a.* from (select * from emp) a where rownum < 11) b 
where b.rm > 5

第二種寫法:
select *
from (select rownum r ,emp.* from emp) b
where b.r >5 and b.r <11
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章