Oracle基礎(chǔ)知識:偽列rownum
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢Oracle基礎(chǔ)知識:偽列rownum,偽列就像表中的列一樣,但是在表中并不存儲。偽列只能查詢,不能進(jìn)行增刪改操作。
在查詢的結(jié)果集中,ROWNUM為結(jié)果集中每一行標(biāo)識一個(gè)行號,第一行返回1,第二行返回2,以此類推。通過ROWNUM偽列可以限制查詢結(jié)果集中返回的行數(shù)。
ROWNUM與ROWID不同,ROWID是插入記錄時(shí)生成,ROWNUM是查詢數(shù)據(jù)時(shí)生成。ROWID標(biāo)識的是行的物理地址。ROWNUM標(biāo)識的是查詢結(jié)果中的行的次序。
案例4:查詢出員工表中前5名員工的姓名,工作,工資。
代碼演示:ROWNUM
SQL> SELECT
ROWNUM,ENAME,JOB,SAL FROM EMP WHERE ROWNUM<=5;
|
案例5:查詢出工資最高的前5名員工的姓名、工資和工資。
案例分析
“工資最高的前5名”需要先降序排序,再取前5名,但是生成ROWNUM操作比排序要早,排序時(shí)已經(jīng)連同ROWNUM一起排序了,因此不能直接在案例1的語句中直接加上Order by就行,而是需要對排序的結(jié)果重新做二次查詢,產(chǎn)生新的ROWNUM才能作為查詢的條件依據(jù)。
代碼演示:ROWNUM應(yīng)用
SQL> SELECT ROWNUM,T.* FROM ①
2 (SELECT ENAME,JOB,SAL
3 FROM EMP ORDER BY SAL
DESC) T ②
4 WHERE ROWNUM<=5
5 /
|
代碼解析:
① T是子查詢②的別名,這里的ROWNUM是第二次查詢后的ROWNUM。
案例6:查詢出表EMP中第5條到第10條之間的記錄。
案例分析
這是分頁的應(yīng)用。在查詢條件中,如果查詢條件中ROWNUM大于某一正整數(shù),則不返還任何結(jié)果。
代碼演示:ROWNUM分頁
SQL> SELECT * FROM
2 (SELECT ROWNUM
R,ENAME,JOB,SAL ①
3 FROM EMP WHERE
ROWNUM<=10) ②
4 WHERE R>5 ③
5 /
|
代碼解析:
① 內(nèi)部查詢中得到ROWNUM 并且用別名R記錄,供外層條件③使用。
② 內(nèi)部查詢的ROWNUM,與外出的ROWNUM列是平等的兩列。
③ 使用的R是內(nèi)層產(chǎn)生的ROWNUM,在外層看來,內(nèi)層查詢的ROWNUM是正常的一列。
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級講師、Unix/Linux 資深專家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
