亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

ORACLE 中ROWNUM用法總結

2024-08-29 13:53:46
字體:
來源:轉載
供稿:網友
今天在ITPUB發現一篇文章,老早以前的了,寫的蠻有意思,特意轉過來收藏。


--------------------------------------------------------------------------------

對于 Oracle 的 rownum 問題,很多資料都說不支持>,>=,=,between...and,只能用以上符號(<、<=、!=),并非說用>, >=,=,between..and 時會提示SQL語法錯誤,而是經常是查不出一條記錄來,還會出現似乎是莫名其妙的結果來,其實您只要理解好了這個 rownum 偽列的意義就不應該感到驚奇,同樣是偽列,rownum 與 rowid 可有些不一樣,下面以例子說明

  假設某個表 t1(c1) 有 20 條記錄

  如果用 select rownum,c1 from t1 where rownum < 10, 只要是用小于號,查出來的結果很容易地與一般理解在概念上能達成一致,應該不會有任何疑問的。

  可如果用 select rownum,c1 from t1 where rownum > 10 (如果寫下這樣的查詢語句,這時候在您的頭腦中應該是想得到表中后面10條記錄),你就會發現,顯示出來的結果要讓您失望了,也許您還會懷疑是不誰刪了一些記錄,然后查看記錄數,仍然是 20 條???那問題是出在哪呢?

  先好好理解 rownum 的意義吧。因為ROWNUM是對結果集加的一個偽列,即先查到結果集之后再加上去的一個列 (強調:先要有結果集)。簡單的說 rownum 是對符合條件結果的序列號。它總是從1開始排起的。所以你選出的結果不可能沒有1,而有其他大于1的值。所以您沒辦法期望得到下面的結果集:

  11 aaaaaaaa

  12 bbbbbbb

  13 ccccccc

  .................

  rownum >10 沒有記錄,因為第一條不滿足去掉的話,第二條的ROWNUM又成了1,所以永遠沒有滿足條件的記錄?;蛘呖梢赃@樣理解:

  ROWNUM是一個序列,是oracle數據庫從數據文件或緩沖區中讀取數據的順序。它取得第一條記錄則rownum值為1,第二條為2,依次類推。如果你用>,>=,=,between...and這些條件,因為從緩沖區或數據文件中得到的第一條記錄的rownum為1,則被刪除,接著取下條,可是它的rownum還是1,又被刪除,依次類推,便沒有了數據。

  有了以上從不同方面建立起來的對 rownum 的概念,那我們可以來認識使用 rownum 的幾種現像

  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

  一般代碼中對結果集進行分頁就是這么干的。

  另外:rowid 與 rownum 雖都被稱為偽列,但它們的存在方式是不一樣的,rowid 可以說是物理存在的,表示記錄在表空間中的唯一位置ID,在DB中唯一。只要記錄沒被搬動過,rowid是不變的。rowid 相對于表來說又像表中的一般列,所以以 rowid 為條件就不會有 rownum那些情況發生。

  另外還要注意:rownum不能以任何基表的名稱作為前綴。

  附加:

  ROWNUM是oracle從8開始提供的一個偽列,是把SQL出來的結果進行編號,始終從1開始,常見的用途就是用來分頁輸出.

  比如

  SELECT *

  FROM torderdetail a

  WHERE ROWNUM <= 10

  這條語句就是輸出前10條紀錄,在這里用途上類似于sql sever的top,不過rownum對于指定編號區間的輸出應該說更強大

  SELECT *

  FROM (SELECT a.*, ROWNUM rn

  FROM torderdetail a)

  WHERE rn >= 10 AND rn <= 20

  這條語句即是輸出第10到第20條紀錄,這里之所以用rownum rn,是把rownum轉成實例,因為rownum本身只能用 <=的比較方式,只有轉成實列,這樣就可做 >=的比較了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
俺去啦;欧美日韩| 中文字幕欧美亚洲| 国产精品网红直播| 国内精久久久久久久久久人| 欧美激情高清视频| 日韩成人激情视频| 成人欧美一区二区三区黑人孕妇| 国产一区二区三区免费视频| 国产精品久久久久久久午夜| 日韩高清av一区二区三区| 4388成人网| 大桥未久av一区二区三区| 日韩福利伦理影院免费| 日韩一区二区三区在线播放| 国内自拍欧美激情| 青青草99啪国产免费| 最近免费中文字幕视频2019| 97香蕉久久夜色精品国产| 精品国产福利视频| 欧美激情久久久久| 欧美性生交大片免费| 日韩激情在线视频| 国产精品一区二区av影院萌芽| 国产精品视频在线观看| 日韩精品极品毛片系列视频| 性欧美长视频免费观看不卡| 51ⅴ精品国产91久久久久久| 久久香蕉精品香蕉| 福利视频一区二区| 久久久午夜视频| 奇米4444一区二区三区| 亚洲欧美日韩第一区| 97视频在线观看成人| 91成人天堂久久成人| 在线观看免费高清视频97| 久久精品久久精品亚洲人| 欧美一区二区三区四区在线| 欧美成人黄色小视频| 日韩视频免费在线| 国产91精品久久久久| 九九精品在线播放| 久久综合五月天| 成人啪啪免费看| 欧美极度另类性三渗透| 亚洲精品自拍偷拍| 欧美福利小视频| 欧美日韩国产成人在线| 欧美精品videos另类日本| 久久久久久久久久久久久久久久久久av| 精品国内亚洲在观看18黄| 一区二区三区四区在线观看视频| 欧美性少妇18aaaa视频| 国产一区深夜福利| 波霸ol色综合久久| 亚洲国产精品va在线| 国产一区二区三区日韩欧美| 久久久女女女女999久久| 欧美日韩国产91| 日韩精品久久久久久福利| 久久精品视频导航| 欧美精品手机在线| 91网站免费观看| 中文字幕在线看视频国产欧美在线看完整| 亚洲国产欧美日韩精品| 国产综合久久久久| 亚洲激情中文字幕| 91av免费观看91av精品在线| 26uuu亚洲伊人春色| 成人a免费视频| 欧美一级淫片videoshd| 91成人性视频| 亚洲精品v欧美精品v日韩精品| 97超级碰碰碰久久久| 亚洲国产成人爱av在线播放| 日韩在线观看网站| 国产成人精品日本亚洲| 国产成人激情小视频| 国产精品香蕉av| 免费91麻豆精品国产自产在线观看| 亚洲国产精品视频在线观看| 最新国产精品拍自在线播放| 中文字幕亚洲一区在线观看| 7m第一福利500精品视频| 久久久久久久国产| 亚洲黄色有码视频| 伊人青青综合网站| 欧美极品少妇xxxxⅹ免费视频| 亚洲欧洲国产一区| 亚洲自拍偷拍色片视频| 亚洲最大成人网色| 美女视频久久黄| 欧美成人免费在线视频| 亚洲第一网站男人都懂| 日韩美女在线观看| 日韩综合中文字幕| 国产精品国产三级国产aⅴ浪潮| 黑人巨大精品欧美一区免费视频| 91精品久久久久久久久中文字幕| 粗暴蹂躏中文一区二区三区| 神马国产精品影院av| 精品久久久精品| 欧美在线观看日本一区| 欧美性生交xxxxxdddd| 欧美日韩国产在线播放| 国产99视频在线观看| 韩剧1988免费观看全集| 欧美大片va欧美在线播放| 久久中文字幕在线视频| 中文字幕日本精品| 国产精品扒开腿做爽爽爽男男| 国产亚洲精品成人av久久ww| 国产69精品久久久久9999| 精品亚洲一区二区三区| 国产精品久久久久久久久久久久久| 亚洲高清免费观看高清完整版| 亚洲网站在线看| 国产精品久久久久91| 国产精品最新在线观看| 久热精品视频在线免费观看| 中日韩美女免费视频网址在线观看| 久久免费国产精品1| 亚洲成人激情在线观看| 久久99久国产精品黄毛片入口| 在线视频日韩精品| 亚洲性生活视频| 日韩av在线一区| 日本中文字幕久久看| 亚洲精品国精品久久99热一| 亚洲免费小视频| 性欧美亚洲xxxx乳在线观看| 欧美成人小视频| 久久精品国产清自在天天线| 欧美激情精品久久久久久蜜臀| 久久99青青精品免费观看| 亚洲精品98久久久久久中文字幕| 欧美一级淫片丝袜脚交| 中日韩美女免费视频网址在线观看| 国产亚洲精品久久久| 国内精品久久久久| 日韩电视剧免费观看网站| 国产成人精品在线播放| 成人a在线视频| 成人免费观看网址| 欧美在线视频一二三| 欧美日本精品在线| 亚洲乱码一区二区| 亚洲理论电影网| 日韩欧美一区二区在线| 欧美精品videossex性护士| 国产有码在线一区二区视频| 日韩激情第一页| 久久成人在线视频| 亚洲一区第一页| 欧美一级淫片aaaaaaa视频| 疯狂做受xxxx高潮欧美日本| 国产成人avxxxxx在线看| 成人免费福利视频| 热re91久久精品国99热蜜臀| 欧美精品aaa| 国产成人av在线| 欧美激情第1页| 最新国产成人av网站网址麻豆| 最新日韩中文字幕| 欧美影院在线播放|