Oracle偽列rownum


Oracle基礎知識:偽列rownum,偽列就像表中的列一樣,但是在表中並不存儲。偽列只能查詢,不能進行增刪改操作。

在查詢的結果集中,ROWNUM為結果集中每一行標識一個行號,第一行返回1,第二行返回2,以此類推。通過ROWNUM偽列可以限制查詢結果集中返回的行數。

ROWNUM與ROWID不同,ROWID是插入記錄時生成,ROWNUM是查詢數據時生成。ROWID標識的是行的物理地址。ROWNUM標識的是查詢結果中的行的次序。

案例4:查詢出員工表中前5名員工的姓名,工作,工資。

代碼演示:ROWNUM

SQL> SELECT ROWNUM,ENAME,JOB,SAL FROM EMP WHERE ROWNUM<=5;

 ROWNUM

ENAME

JOB

SAL

1

SMITH

CLERK

800

2

ALLEN

SALESMAN

1600

3

WARD

SALESMAN

1250

4

JONES

MANAGER

2975

5

MARTIN

SALESMAN

1250

 

案例5:查詢出工資最高的前5名員工的姓名、工資和工資。

案例分析

“工資最高的前5名”需要先降序排序,再取前5名,但是生成ROWNUM操作比排序要早,排序時已經連同ROWNUM一起排序了,因此不能直接在案例1的語句中直接加上Order by就行,而是需要對排序的結果重新做二次查詢,產生新的ROWNUM才能作為查詢的條件依據。

代碼演示:ROWNUM應用

SQL> SELECT ROWNUM,T.* FROM  ①

  2      (SELECT ENAME,JOB,SAL

  3       FROM EMP ORDER BY SAL DESC) T  ②

  4  WHERE ROWNUM<=5

  5  /

 

ROWNUM

ENAME

JOB

SAL

1

KING

PRESIDENT

5000

2

SCOTT

ANALYST

3000

3

FORD

ANALYST

3000

4

JONES

MANAGER

2975

5

BLAKE

MANAGER

2850

 

代碼解析:

① T是子查詢②的別名,這里的ROWNUM是第二次查詢后的ROWNUM。

案例6:查詢出表EMP中第5條到第10條之間的記錄。

案例分析

這是分頁的應用。在查詢條件中,如果查詢條件中ROWNUM大於某一正整數,則不返還任何結果。

代碼演示:ROWNUM分頁

SQL> SELECT * FROM

  2     (SELECT ROWNUM R,ENAME,JOB,SAL  ①

  3      FROM EMP WHERE ROWNUM<=10)  ②

  4  WHERE R>5  ③

  5  /

 R

ENAME

JOB

SAL

6

BLAKE

MANAGER

2850

7

CLARK

MANAGER

2450

8

SCOTT

ANALYST

3000

9

KING

PRESIDENT

5000

10

TURNER

SALESMAN

1500

 

代碼解析:

① 內部查詢中得到ROWNUM 並且用別名R記錄,供外層條件③使用。

② 內部查詢的ROWNUM,與外出的ROWNUM列是平等的兩列。

③ 使用的R是內層產生的ROWNUM,在外層看來,內層查詢的ROWNUM是正常的一列。

來源:Oracle培訓


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM