<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无码专区亚洲av果冻传媒 | 免费精品人在线二线三线区别| 亚洲国产第一站精品蜜芽| eeuss影院免费92242部| 亚洲美女高清一区二区三区| 狠狠久久永久免费观看| 久久久久亚洲精品无码系列| 精品无码国产污污污免费网站国产| 亚洲日本一区二区一本一道 | 在线jlzzjlzz免费播放| 亚洲精品无码精品mV在线观看| 最新国产精品亚洲| 久久免费公开视频| 亚洲精品在线电影| aa级毛片毛片免费观看久| 国产亚洲一区二区手机在线观看| 91成人免费福利网站在线| 国产免费人视频在线观看免费| 亚洲春黄在线观看| 久久久久国产精品免费免费搜索 | 亚洲精品国产第1页| 在线看片免费不卡人成视频| 亚洲欧美成人一区二区三区| 免费一级国产生活片| 亚洲最大成人网色香蕉| 永久久久免费浮力影院| 一级做α爱过程免费视频| 日本亚洲欧洲免费天堂午夜看片女人员| 免费无码作爱视频| 久久久精品国产亚洲成人满18免费网站 | 精品国产亚洲AV麻豆| 国产亚洲精品激情都市| 100部毛片免费全部播放完整| 亚洲色欲啪啪久久WWW综合网| 18以下岁毛片在免费播放| 色欲aⅴ亚洲情无码AV| 亚洲三区在线观看无套内射| 又粗又大又黑又长的免费视频| 国产精品亚洲精品爽爽| 国产成人aaa在线视频免费观看|