oracle取前幾行|中間幾行|後幾行

oracle中取指定行是利用一個參數rownum,例如,取前10行數據的代碼就是:html

select * from tablea where rownum < 10sql

那麼取中間幾行是否是就把rownum < 10改成rownum > 10 and rownum < 20呢?數據庫

嘗試運行,會發現有異常!!!!而後,咱們就須要學習rownum 的真正含義,以及如何使用了。oracle

先好好理解 rownum 的意義吧。由於ROWNUM是對結果集加的一個僞列,即先查到結果集以後再加上去的一個列 (強調:先要有結果集)。簡單的說 rownum 是對符合條件結果的序列號。它老是從1開始排起的。因此你選出的結果不可能沒有1,而有其餘大於1的值。因此沒辦法指望獲得下面的結果集:學習

11 aaaaaaaa
12 bbbbbbb
13 ccccccc
.................htm

rownum >10 沒有記錄,由於第一條不知足去掉的話,第二條的rownum又成了1,因此永遠沒有知足條件的記錄。或者能夠這樣理解:rownum是一個序列,是oracle數據庫從數據文件或緩衝區中讀取數據的順序。它取得第一條記錄則rownum值爲1,第二條爲2,依次類 推。若是你用>,>=,=,between...and這些條件,由於從緩衝區或數據文件中獲得的第一條記錄的rownum爲1,則被刪除, 接着取下條,但是它的rownum仍是1,又被刪除,依次類推,便沒有了數據。blog

任什麼時候候想把 rownum = 1 這條記錄拋棄是不對的,它在結果集中是不可或缺的,少了rownum=1 就像空中樓閣通常不能存在,因此你的 rownum 條件要包含到 1.get

若是就是想要用 rownum > 10 這種條件的話,就要用嵌套語句,把 rownum 先生成,而後對他進行查詢。
select * from (select rownum as rn,t1.* from tablea t1 where ...) tab where tab.rn >10table

相似的若是想要取中間幾行數據的話,sql語句就應該這麼寫:select * from (selet rownum as rn,t1.* from tablea t1 where ...) tab where tab.rn >10 and tab.rn < 20select

 參考文章:http://www.javashuo.com/article/p-eidejndy-db.html

相關文章
相關標籤/搜索