夢想飛翔

          自強不息
          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

          主站蜘蛛池模板: 静乐县| 济阳县| 资源县| 韶关市| 吉水县| 洞口县| 中江县| 双峰县| 青川县| 寿光市| 肇州县| 盐城市| 晋州市| 贵港市| 铁岭市| 兴业县| 张北县| 丹棱县| 吕梁市| 柳州市| 抚松县| 普兰县| 繁昌县| 玉溪市| 若羌县| 温州市| 忻城县| 达州市| 措美县| 达日县| 华亭县| 武乡县| 涞源县| 额敏县| 芒康县| 平江县| 根河市| 宾川县| 衡山县| 肇东市| 陇川县|