Oracle 偽列 ROWNUM 應用與總結

2021-08-06 02:15:50 字數 1626 閱讀 7196

rownum 是根據 sql 查詢出的結果給每行分配乙個邏輯編號, 每行資料會因為輸出的順序不同而獲得不同的邏輯編號, 編號是從 1 開始的;

select empno, rownum from emp;

-- 查詢 scott 用於 emp 表中, empno 和對應的 rownum

-- 錯誤演示:

select e.rownum from emp;

-- 此種寫法是錯誤的!

-- 以下是所有錯誤範例

-- 錯誤 1:

select * from emp where rownum between 2

and5;

-- 錯誤 2:

select * from emp where rownum >= 2

and rownum <= 5;

解答: 為什麼不能直接在 where 子句中, 使用: rownum between 2 and 5 ?

-- 輸出結果的前 n 條資料, 可以通過 rownum 是實現

select empno from emp where rownum < 5;

-- 輸出前 4 條資料

分頁查詢是經常用到的一種應用需求

本文演示 3 種實現方式:

-- way 1: 

select * from (

select e.*, rownum rn from emp e) a

where a.rn between 2

and5;

-- 效率最低

-- way 2: 

select e.*, rownum rn from emp e where rownum <=5

minus

select e.*, rownum rn from emp e where rownum <=1;

-- 效率較高

-- way 3: 

select * from (

select e.*, rownum rn from emp where rownum <=5) a

where a.rn>=2;

-- 效率最高

-- 暫時沒有實現
請參看, conan zone 部落格中的總結: 利用rownum做分組子排序

oracle 偽列rownum 與 分頁

因為rownum是對結果集加的乙個偽列,即先查到結果集之後再加上去的乙個列 強調 先要有結果集 簡單的說 rownum 是對符合條件結果的序列號。它總是從1開始排起的。所以你選出的結果不可能沒有1,而有其他大於1的值。所以select from tab1 where rownum n n大於1 是得...

oracle分頁 使用rownum 偽列

connected to oracle database 10g enterprise edition release 10.2.0.1.0 connected as tudou sql select from temp1 name age 土土 22 z壯 23 z 25 a 28 奇才 29 才...

Oracle的資料偽列 ROWNUM

資料庫 oracle11g 資料偽列 rownum 範例 查詢前5條記錄 select rownum,empno,job,hiredate,sal from emp where rownum 5 範例 查詢 6 10 條記錄 按照正常的思維肯定直接進行between and的判斷 如 select ...