最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

oracle的rownum深入解析

 更新時間:2012年11月20日 15:43:08   作者:  
本文將詳細(xì)介紹oracle的rownum的使用細(xì)節(jié),需要的朋友可以參考下

本人最近在使用oracle的rownum實現(xiàn)分頁顯示的時候,對rownum做了進(jìn)一步的分析和研究?,F(xiàn)歸納如下,希望能給大家?guī)硎斋@。

對于rownum來說它是oracle系統(tǒng)順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用于限制查詢返回的總行數(shù),而且rownum不能以任何表的名稱作為前綴。
舉例說明
例如表:student(學(xué)生)表,表結(jié)構(gòu)為:

復(fù)制代碼 代碼如下:

ID    char(6)      --學(xué)號
name    VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values('200001',‘張一');
insert into sale values('200002',‘王二');
insert into sale values('200003',‘李三');
insert into sale values('200004',‘趙四');
commit;

(1) rownum 對于等于某值的查詢條件
如果希望找到學(xué)生表中第一條學(xué)生的信息,可以使用rownum=1作為條件。但是想找到學(xué)生表中第二條學(xué)生的信息,使用rownum=2結(jié)果查不到數(shù)據(jù)。因為rownum都是從1開始,但是1以上的自然數(shù)在rownum做等于判斷是時認(rèn)為都是false條件,所以無法查到rownum = n(n>1的自然數(shù))。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回記錄條數(shù)的地方,保證不出錯,如:隱式游標(biāo))
SQL> select rownum,id,name from student where rownum=1;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 張一
SQL> select rownum,id,name from student where rownum =2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
(2)rownum對于大于某值的查詢條件
如果想找到從第二行記錄以后的記錄,當(dāng)使用rownum>2是查不出記錄的,原因是由于rownum是一個總是從1開始的偽列,Oracle 認(rèn)為rownum> n(n>1的自然數(shù))這種條件依舊不成立,所以查不到記錄
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以后的記錄呀。可以使用以下的子查詢方法來解決。注意子查詢中的rownum必須要有別名,否則還是不會查出記錄來,這是因為rownum不是某個表的列,如果不起別名的話,無法知道rownum是子查詢的列還是主查詢的列。
SQL>select * from(select rownum no ,id,name from student) where no>2;
NO ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
4 200004 趙四
SQL> select * from(select rownum,id,name from student)where rownum>2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
(3)rownum對于小于某值的查詢條件
如果想找到第三條記錄以前的記錄,當(dāng)使用rownum<3是能得到兩條記錄的。顯然rownum對于rownum<n((n>1的自然數(shù))的條件認(rèn)為是成立的,所以可以找到記錄。
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 張一
2 200002 王二
綜上幾種情況,可能有時候需要查詢rownum在某區(qū)間的數(shù)據(jù),那怎么辦呀從上可以看出rownum對小于某值的查詢條件是人為true的,rownum對于大于某值的查詢條件直接認(rèn)為是false的,但是可以間接的讓它轉(zhuǎn)為認(rèn)為是true的。那就必須使用子查詢。例如要查詢rownum在第二行到第三行之間的數(shù)據(jù),包括第二行和第三行數(shù)據(jù),那么我們只能寫以下語句,先讓它返回小于等于三的記錄行,然后在主查詢中判斷新的rownum的別名列大于等于二的記錄行。但是這樣的操作會在大數(shù)據(jù)集中影響速度。
SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
NO ID NAME
---------- ------ ---------------------------------------------------
2 200002 王二
3 200003 李三
(4)rownum和排序
Oracle中的rownum的是在取數(shù)據(jù)的時候產(chǎn)生的序號,所以想對指定排序的數(shù)據(jù)去指定的rowmun行數(shù)據(jù)就必須注意了。
SQL> select rownum ,id,name from student order by name;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
3 200003 李三
2 200002 王二
1 200001 張一
4 200004 趙四
可以看出,rownum并不是按照name列來生成的序號。系統(tǒng)是按照記錄插入時的順序給記錄排的號,rowid也是順序分配的。為了解決這個問題,必須使用子查詢
SQL> select rownum ,id,name from (select * from student order by name);
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200003 李三
2 200002 王二
3 200001 張一
4 200004 趙四
這樣就成了按name排序,并且用rownum標(biāo)出正確序號(有小到大)

相關(guān)文章

  • 解決Oracle?DISTINCT?報錯?inconsistent?datatypes:?expected?-?got?CLOB(數(shù)據(jù)類型不一致:?應(yīng)為?-,?但卻獲得?CLOB)的問題

    解決Oracle?DISTINCT?報錯?inconsistent?datatypes:?expected?

    這篇文章主要介紹了Oracle DISTINCT報錯inconsistent datatypes:expected-got CLOB(數(shù)據(jù)類型不一致:?應(yīng)為-,但卻獲得?CLOB),本文給大家分享三種解決方案,需要的朋友可以參考下
    2023-07-07
  • Oracle Index索引無效的原因與解決方法

    Oracle Index索引無效的原因與解決方法

    這篇文章主要給大家介紹了關(guān)于Oracle Index索引無效的原因與解決方法,文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • oracle數(shù)據(jù)庫去除重復(fù)數(shù)據(jù)常用的方法總結(jié)

    oracle數(shù)據(jù)庫去除重復(fù)數(shù)據(jù)常用的方法總結(jié)

    數(shù)據(jù)清理的時候常常會清除表中的重復(fù)的數(shù)據(jù),那么在oracle中怎么處理呢?下面這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫去除重復(fù)數(shù)據(jù)常用的方法,需要的朋友可以參考下
    2022-05-05
  • 基于ORA-19815閃回空間爆滿問題的處理方法

    基于ORA-19815閃回空間爆滿問題的處理方法

    下面小編就為大家分享一篇基于ORA-19815閃回空間爆滿問題的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • oracle索引的測試實例代碼

    oracle索引的測試實例代碼

    這篇文章主要給大家介紹了關(guān)于oracle索引測試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 從Oracle 表格行列轉(zhuǎn)置說起

    從Oracle 表格行列轉(zhuǎn)置說起

    當(dāng)你面對如下格式的一個表格:NO為人員的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日)。
    2009-09-09
  • 解決報錯ora-32035的方法分析

    解決報錯ora-32035的方法分析

    本篇文章是對解決報錯ora-32035的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle數(shù)據(jù)庫批量變更字段類型的實現(xiàn)步驟

    Oracle數(shù)據(jù)庫批量變更字段類型的實現(xiàn)步驟

    我有個項目使用Oracle數(shù)據(jù)庫,運(yùn)行幾年后數(shù)據(jù)量較大,需要對數(shù)據(jù)庫做一次優(yōu)化,其中有些字段類型類型需要調(diào)整,這里分享一下實現(xiàn)步驟,感興趣的朋友可以參考下
    2024-02-02
  • oracle通過行范圍查詢?nèi)?至10行

    oracle通過行范圍查詢?nèi)?至10行

    這篇文章主要介紹了oracle通過行范圍查詢?nèi)?至10行,以EMP表為范例,需要的朋友可以參考下
    2014-08-08
  • oracle添加序號列3種方法大全

    oracle添加序號列3種方法大全

    Oracle是眾多的關(guān)系型數(shù)據(jù)庫系統(tǒng)之一,它可以為表格中的每一行創(chuàng)建唯一的序號列,這篇文章主要給大家介紹了關(guān)于oracle添加序號列的3種方法大全,需要的朋友可以參考下
    2024-03-03

最新評論

河池市| 浠水县| 普定县| 元氏县| 金华市| 岫岩| 乡宁县| 金山区| 吉林省| 本溪| 犍为县| 满城县| 莫力| 阜宁县| 乌拉特中旗| 勐海县| 唐山市| 焦作市| 永福县| 佛冈县| 嘉祥县| 临海市| 新邵县| 达孜县| 四川省| 四会市| 克拉玛依市| 甘肃省| 乌拉特中旗| 商南县| 大新县| 通州市| 绍兴县| 宜章县| 喀喇沁旗| 柘荣县| 二连浩特市| 瓦房店市| 福建省| 册亨县| 郴州市|