成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle查詢rownum與rowid的不同之處

數據庫 Oracle
在Oracle查詢中rownum與rowid是我們經常用到的,以下的文章主要是介紹rownum與rowid在實際應用中的不同之處,以下就是正文的介紹。

以下的文章主要是介紹Oracle查詢rownum與rowid的不同之處,以及以假設的方式即,查詢條件為rownum = 2,在查詢出第一條記錄的時的具體內容的介紹,以下就是文章的詳細內容的介紹。

在查詢中,我們可以注意到,類似于

  1. select xx from table where rownum < n”(n>1) 

這樣的查詢是有正確含義的,而

  1. select xx from table where rownum = n” 

這樣的查詢只在n=1的時候成立,

  1. select xx from table where rownum > n”(n>1) 

這樣的查詢只能得到一個空集。

另外

  1. select xx from table where rownum > 0” 

這個查詢會返回所有的記錄。這是為什么呢?原因就在于Oracle對rownum的處理上,rownum是在得到結果集的時候產生的,用于標記結果集中結果順序的一個字段,這個字段被稱為“偽數列”,也就是事實上不存在的一個數列。

它的特點是按順序標記,而且是逐次遞加的,換句話說就是只有有rownum=1的記錄,才可能有rownum=2的記錄。

讓我們回頭來分析一下在where中使用rownum作為Oracle查詢條件的情況。在rownum取=1,或者rownum <= n (n>1)的時候,沒有問題。那么為什么當條件為rownum = n或者rownum >= n時明明有數據卻只能得到一個空集呢?假設我們的查詢條件為rownum = 2,那么在查詢出的第一條記錄的時候,Oracle標記此條記錄rownum為1,結果發現和rownum=2的條件不符,于是結果集為空。

寫到這里,我忽然有一個有趣的想法:假如有一條查詢語句為select xx,yy from table where zz > 20 and rownum < 10,那么在執行的時候,是先按照zz>20的條件查詢出一個結果集,然后按照rownum取出前10條返回?還是在按照zz>20的條件先查詢,然后有一個記錄就標記一個rownum,到rownum<10的時候就停止查詢?我覺得應該是后者,也就是在執行語句的時候,不是做full scan,而是取夠數據就停止查詢。

要驗證這個想法應該很簡單,找一個數據量非常大的表進行Oracle查詢就可以了。可惜目前我沒有這樣的表。

我們可以看出,直接使用rownum是要受到限制的。但是很容易遇到這樣的需求“查出符合條件的第xx條到第xx條記錄”,比如頁面的分頁處理。這個時候如何構造出適合自己的結果集?嗯,墻邊那位說全取出來手工挑選的哥們可以拉出去了。

當然這樣做也是可以的,但是前提是整個數據集的數據條數不多的情況下。假如遇到上十萬百條的數據,全部取出來的話,用戶就不用干別的事情了。這個時候用戶應該怎么做呢?當然就是要用到我們介紹的rownum拉!rownum不是個“偽數列”么,好說,我們現在把它弄成一個實在的字段就可以了。

具體做法就是利用子Oracle查詢,在構建臨時表的時候,把rownum也一起構造進去。比如

  1. select xx,yy from 
    (select xx,yy,rownum as xyz from table where zz 
    >20) 
    where xyz between 10 and 20” 

這樣就可以了。

另外使用Oracle提供的結果集處理函數minus也可以做到,例如

  1. select xx,yy from table where zz > 20 and rownum 
    <20 minus select xx,yy from table where zz>20 and rownum <10” 

但是使用minus好像比使用子查詢更加消耗資源。

和rownum相似,Oracle還提供了另外一個偽數列:rowid。不過rowid和rownum不同,一般說來每一行數據對應的rowid是固定而且唯一的,在這一行數據存入數據庫的時候就確定了。可以利用rowid來查詢記錄,而且通過rowidOracle查詢記錄是查詢速度最快的查詢方法。

(這個我沒有試過,另外要記住一個長度在18位,而且沒有太明顯規律的字符串是一個很困難的事情,所以我個人認為利用rowid查詢記錄的實用性不是很大)rowid只有在表發生移動(比如表空間變化,數據導入/導出以后),才會發生變化。

 

【編輯推薦】

  1. Oracle常用的命令中Oracl的相關數據類型列舉
  2. Oracle刪除后,重裝方案有哪些
  3. 在Oracle SQL優化中經常使用的方案
  4. Oracle性能調整,提升block的效率
  5. Oracle性能調整的要點中的操作系統的優化
責任編輯:佚名 來源: 互聯網
相關推薦

2010-04-20 16:07:25

Oracle DRCP

2010-05-06 10:09:44

Oracle in

2009-05-25 10:00:01

Oraclerownumrowid

2009-08-20 10:39:00

Java與C#的不同之

2012-08-23 13:36:27

2010-08-05 11:08:27

DB2存儲過程

2010-04-20 14:32:49

Oracle LABE

2014-08-14 17:11:51

LinuxWindows

2023-08-10 17:23:10

LibreOfficOpenOffice

2009-12-15 18:47:56

Ruby框架OG

2012-08-31 11:21:12

云計算大數據

2021-03-09 16:38:48

加密貨幣比特幣貨幣

2010-05-21 15:33:54

MySQL text

2009-11-26 19:18:59

PHP函數implod

2023-11-27 08:00:36

開發數據庫查詢

2010-09-27 10:43:35

無線路由器

2017-03-14 15:46:30

AndroidiOS不同之處

2010-05-21 15:53:30

2010-03-10 10:58:12

python接口功能

2010-02-06 09:31:42

C++函數對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人av高清 | 亚洲欧美日韩电影 | 一级午夜aaa免费看三区 | 久久久综合网 | 综合五月婷 | 亚洲最色视频 | 国产专区在线 | 亚洲视频在线一区 | 亚洲日日夜夜 | 欧美又大粗又爽又黄大片视频 | 国产在线一区二 | 美国a级毛片免费视频 | 美女视频一区 | 蜜桃毛片 | 久久久久国产一级毛片高清网站 | 国产在视频一区二区三区吞精 | 91免费福利在线 | 日韩二区三区 | 中文字幕乱码一区二区三区 | 男人av在线播放 | 久久精品国产一区 | 91久久电影 | 亚洲欧美综合精品久久成人 | 欧美黑人国产人伦爽爽爽 | 精品欧美一区免费观看α√ | 在线中文字幕亚洲 | 日本人做爰大片免费观看一老师 | 亚洲综合伊人 | 久久久久亚洲精品中文字幕 | 一级黄a视频 | 国产一级视频在线观看 | 9porny九色视频自拍 | аⅴ资源新版在线天堂 | 亚洲视频三 | 欧美中文字幕一区二区三区亚洲 | 亚洲免费观看 | 99久久日韩精品免费热麻豆美女 | 亚洲一区二区三区桃乃木香奈 | 亚洲男女视频在线观看 | 亚洲国产偷| 国产精品国产三级国产aⅴ中文 |