oracle 偽列rownum 與 分頁

2021-05-22 22:01:02 字數 1155 閱讀 9331

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

1. select rownum,c1 from t1 where rownum != 10 為何是返回前9條資料呢?它與 select rownum,c1 from tablename where rownum < 10 返回的結果集是一樣的呢?

因為是在查詢到結果集後,顯示完第 9 條記錄後,之後的記錄也都是 != 10,或者 >=10,所以只顯示前面9條記錄。也可以這樣理解,rownum 為9後的記錄的 rownum為10,因條件為 !=10,所以去掉,其後記錄補上,rownum又是10,也去掉,如果下去也就只會顯示前面9條記錄了

2. 為什麼 rownum >1 時查不到一條記錄,而 rownum >0 或 rownum >=1 卻總顯示所以的記錄

因為 rownum 是在查詢到的結果集後加上去的,它總是從1開始

3. 為什麼 between 1 and 10 或者 between 0 and 10 能查到結果,而用 between 2 and 10 卻得不到結果

原因同上一樣,因為 rownum 總是從 1 開始

從上可以看出,任何時候想把 rownum = 1 這條記錄拋棄是不對的,它在結果集中是不可或缺的,少了rownum=1 就像空中樓閣一般不能存在,所以你的 rownum 條件要包含到 1

但如果就是想要用 rownum > 10 這種條件的話話就要用巢狀語句,把 rownum 先生成,然後對他進行查詢。

select *

from (selet rownum as rn,t1.* from a where ...)

where rn >10

一般**中對結果集進行分頁就是這麼幹的。

ms sql 中一般用 top not in

select top 10 *

from testtable

where (id not in

(select top 20 id

from testtable

order by id))

order by id

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 ...

oracle中的偽列rownum

對於 oracle 的 rownum 問題,很多資料都說不支援 between.and,只能用以上符號 並非說用 between.and 時會提示sql語法錯誤,而是經常是查不出一條記錄來,還會出現似乎是莫名其妙的結果來,其實您只要理解好了這個 rownum 偽列的意義就不應該感到驚奇,同樣是偽列,...