原文:
含**釋:
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
rownum的使用 分頁
oracle分頁顯示方法 一 使用rownum分頁顯示方式 方式1 select from select rownum r,a.from b i exch info a where rownum 10 where r 5 方式2 select from select rownum r,a.from ...
Oracle中使用rownum分頁
oracle的常用分頁就是rownum,在公司中也是使用rownum分頁。在oracle中分頁和mysql中不一樣,在mysql中由limit x,y這種形式分頁,而在oracle中常用分頁就是使用rownum分頁,相當於限定行數,從0行到多少行。rownum分頁必須從rownum 0開始,然後ro...
Oracle 分頁查詢詳解(rownum 實現)
1.以偽列 rownum 作為分頁的實現方式,以下兩種方式實現效果最佳 2.咱在實現的時候,只需要關注 分頁的範圍 其它按下列情況套用即可 3.特別注意 排序 時,rownum 的位置 先排序,再取 rownum 注意值範圍,rownum 5 select tt.from select rownum...