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

oracle的rownum深入解析

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

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

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

復制代碼 代碼如下:

ID    char(6)      --學號
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 對于等于某值的查詢條件
如果希望找到學生表中第一條學生的信息,可以使用rownum=1作為條件。但是想找到學生表中第二條學生的信息,使用rownum=2結果查不到數據。因為rownum都是從1開始,但是1以上的自然數在rownum做等于判斷是時認為都是false條件,所以無法查到rownum = n(n>1的自然數)。
SQL> select rownum,id,name from student where rownum=1;(可以用在限制返回記錄條數的地方,保證不出錯,如:隱式游標)
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對于大于某值的查詢條件
如果想找到從第二行記錄以后的記錄,當使用rownum>2是查不出記錄的,原因是由于rownum是一個總是從1開始的偽列,Oracle 認為rownum> n(n>1的自然數)這種條件依舊不成立,所以查不到記錄
SQL> select rownum,id,name from student where rownum >2;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
那如何才能找到第二行以后的記錄呀??梢允褂靡韵碌淖硬樵兎椒▉斫鉀Q。注意子查詢中的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對于小于某值的查詢條件
如果想找到第三條記錄以前的記錄,當使用rownum<3是能得到兩條記錄的。顯然rownum對于rownum<n((n>1的自然數)的條件認為是成立的,所以可以找到記錄。
SQL> select rownum,id,name from student where rownum <3;
ROWNUM ID NAME
---------- ------ ---------------------------------------------------
1 200001 張一
2 200002 王二
綜上幾種情況,可能有時候需要查詢rownum在某區(qū)間的數據,那怎么辦呀從上可以看出rownum對小于某值的查詢條件是人為true的,rownum對于大于某值的查詢條件直接認為是false的,但是可以間接的讓它轉為認為是true的。那就必須使用子查詢。例如要查詢rownum在第二行到第三行之間的數據,包括第二行和第三行數據,那么我們只能寫以下語句,先讓它返回小于等于三的記錄行,然后在主查詢中判斷新的rownum的別名列大于等于二的記錄行。但是這樣的操作會在大數據集中影響速度。
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的是在取數據的時候產生的序號,所以想對指定排序的數據去指定的rowmun行數據就必須注意了。
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標出正確序號(有小到大)

相關文章

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

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

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

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

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

    oracle數據庫去除重復數據常用的方法總結

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

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

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

    oracle索引的測試實例代碼

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

    從Oracle 表格行列轉置說起

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

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

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

    Oracle數據庫批量變更字段類型的實現步驟

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

    oracle通過行范圍查詢取4至10行

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

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

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

最新評論

广南县| 万山特区| 龙岩市| 于田县| 理塘县| 通渭县| 新乡市| 浦城县| 桃园县| 仪陇县| 五家渠市| 枣庄市| 榆中县| 左云县| 武胜县| 黄龙县| 伊宁县| 东乌珠穆沁旗| 和政县| 新疆| 鄂州市| 南汇区| 武义县| 奉新县| 金华市| 谷城县| 黑龙江省| 溧阳市| 都兰县| 清丰县| 左云县| 咸丰县| 长顺县| 永济市| 高尔夫| 金堂县| 彰化县| 虎林市| 砚山县| 娱乐| 淅川县|