<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢想飛翔

    自強不息
    posts - 111, comments - 30, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    rownum查詢

    看到一篇好文章,大家一起看看

    [轉貼]如何正確利用Rownum來限制查詢所返回的行數?
    軟件環境:
    1、Windows NT4.0+ORACLE 8.0.4
    2、ORACLE安裝路徑為:C:\ORANT

    含義解釋:
    1、rownum是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,
      依此類推,這個偽字段可以用于限制查詢返回的總行數。
    2、rownum不能以任何基表的名稱作為前綴。
    使用方法:
    現有一個商品銷售表sale,表結構為:
    month    char(6)      --月份
    sell    number(10,2)   --月銷售金額

    create table sale (month char(6),sell number);
    insert into sale values('200001',1000);
    insert into sale values('200002',1100);
    insert into sale values('200003',1200);
    insert into sale values('200004',1300);
    insert into sale values('200005',1400);
    insert into sale values('200006',1500);
    insert into sale values('200007',1600);
    insert into sale values('200101',1100);
    insert into sale values('200202',1200);
    insert into sale values('200301',1300);
    insert into sale values('200008',1000);
    commit;

    SQL> select rownum,month,sell from sale where rownum=1;(可以用在限制返回記錄條數的地方,保證不出錯,如:隱式游標)

    ROWNUM MONTH SELL
    --------- ------ ---------
    1 200001 1000

    SQL> select rownum,month,sell from sale where rownum=2;(1以上都查不到記錄)

    沒有查到記錄

    SQL> select rownum,month,sell from sale where rownum>5;
    (由于rownum是一個總是從1開始的偽列,Oracle 認為這種條件不成立,查不到記錄)


    沒有查到記錄

    只返回前3條紀錄
    SQL> select rownum,month,sell from sale where rownum<4;

    ROWNUM MONTH SELL
    --------- ------ ---------
    1 200001 1000
    2 200002 1100
    3 200003 1200


    如何用rownum實現大于、小于邏輯?(返回rownum在4—10之間的數據)(minus操作,速度會受影響)
    SQL> select rownum,month,sell from sale where rownum<10
    2 minus
    3 select rownum,month,sell from sale where rownum<5;

    ROWNUM MONTH SELL
    --------- ------ ---------
    5 200005 1400
    6 200006 1500
    7 200007 1600
    8 200101 1100
    9 200202 1200

    想按日期排序,并且用rownum標出正確序號(有小到大)
    SQL> select rownum,month,sell from sale order by month;

    ROWNUM MONTH SELL
    --------- ------ ---------
    1 200001 1000
    2 200002 1100
    3 200003 1200
    4 200004 1300
    5 200005 1400
    6 200006 1500
    7 200007 1600
    11 200008 1000
    8 200101 1100
    9 200202 1200
    10 200301 1300

    查詢到11記錄.

    可以發現,rownum并沒有實現我們的意圖,系統是按照記錄入庫時的順序給記錄排的號,rowid也是順序分配的

    SQL> select rowid,rownum,month,sell from sale order by rowid;

    ROWID ROWNUM MONTH SELL
    ------------------ --------- ------ ---------
    000000E4.0000.0002 1 200001 1000
    000000E4.0001.0002 2 200002 1100
    000000E4.0002.0002 3 200003 1200
    000000E4.0003.0002 4 200004 1300
    000000E4.0004.0002 5 200005 1400
    000000E4.0005.0002 6 200006 1500
    000000E4.0006.0002 7 200007 1600
    000000E4.0007.0002 8 200101 1100
    000000E4.0008.0002 9 200202 1200
    000000E4.0009.0002 10 200301 1300
    000000E4.000A.0002 11 200008 1000

    查詢到11記錄.

    正確用法,使用子查詢
    SQL> select rownum,month,sell from (select month,sell from sale group by month,sell) where rownum<13;

    ROWNUM MONTH SELL
    --------- ------ ---------
    1 200001 1000
    2 200002 1100
    3 200003 1200
    4 200004 1300
    5 200005 1400
    6 200006 1500
    7 200007 1600
    8 200008 1000
    9 200101 1100
    10 200202 1200
    11 200301 1300

    按銷售金額排序,并且用rownum標出正確序號(有小到大)
    SQL> select rownum,month,sell from (select sell,month from sale group by sell,month) where rownum<13;

    ROWNUM MONTH SELL
    --------- ------ ---------
    1 200001 1000
    2 200008 1000
    3 200002 1100
    4 200101 1100
    5 200003 1200
    6 200202 1200
    7 200004 1300
    8 200301 1300
    9 200005 1400
    10 200006 1500
    11 200007 1600

    查詢到11記錄.

    利用以上方法,如在打印報表時,想在查出的數據中自動加上行號,就可以利用rownum。

    返回第5—9條紀錄,按月份排序
    SQL> select * from (select rownum row_id ,month,sell
    2 from (select month,sell from sale group by month,sell))
    3 where row_id between 5 and 9;

    ROW_ID MONTH SELL
    ---------- ------ ----------
    5 200005 1400
    6 200006 1500
    7 200007 1600
    8 200008 1000
    9 200101 1100

    主站蜘蛛池模板: 久久综合给合久久国产免费| 久久综合AV免费观看| 久久精品亚洲一区二区三区浴池| 69xx免费观看视频| 国产亚洲精品成人久久网站 | 无码高潮少妇毛多水多水免费| 亚洲午夜精品一区二区麻豆| 亚洲国产一区视频| 亚洲美女免费视频| 深夜福利在线视频免费| 亚洲午夜久久影院| 日本高清免费网站| 未满十八18禁止免费无码网站| 亚洲AV无码一区二区三区牲色| 亚洲成AV人片在WWW色猫咪| 在线观看免费为成年视频| 中文字幕成人免费高清在线| 亚洲精品456人成在线| 伊伊人成亚洲综合人网7777| 国产1000部成人免费视频| 国产成人1024精品免费| 在线观看亚洲AV日韩AV| 亚洲第一AV网站| 亚洲M码 欧洲S码SSS222| 成人免费视频77777| 两个人看的www免费视频| 色婷婷亚洲一区二区三区| 亚洲白色白色在线播放| 国产亚洲精品线观看动态图| 噜噜嘿在线视频免费观看| 午夜免费福利片观看| 一区在线免费观看| 性色av极品无码专区亚洲| 亚洲国产精品综合久久网各| 亚洲色爱图小说专区| 免费吃奶摸下激烈视频| 色婷婷7777免费视频在线观看| 久久久精品免费国产四虎| 国产福利免费视频| 黄色毛片免费网站| 亚洲av永久无码一区二区三区|