本文通過個人經驗來客觀的講述如何利用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
oracle 分頁查詢 rownum
rownum 可能都知道 rownum 只適用於小於或小於等於,如果進行等於判斷,那麼只能等於 1,不能進行大於的比較。rownum是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推。rownum 總是從1 開始,不管當前的記錄是否滿足查詢結果,rownu...
Oracle查詢 rownum和rowid的區別
在oracle中,有乙個很有趣的東西,那就是rownum。當你從某個表中查詢資料的時候,返回的結果集中都會帶有rownum這個字段,而且有時候也可以使用rownum進行一些條件查詢。在查詢中,我們可以注意到,類似於 select xx from table where rownum n n 1 這樣...
Oracle中分段查詢rownum
oracle中的排序sql語法 第一種select a.from select b.rownum row num from select from ac order by ac.rowid b where rownum 200 a where a.row num 100 注意 這裡巢狀了三層查詢,最...