Oracle中正确利用Rownum来限制查询所返回的行数
游鱼 发表于 2006-1-17 22:40:00
含义解释:
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配置par参数文件做备份,可以对tables=(表1,表2...),query='where rownum做导出行数控制,#exp parfile=jpf.par
`ROWNUM`始终从1开始,并递增,但仅在查询结果集中有效,也就是说,它基于查询语句所返回的行数来计数。 ### 使用`ROWNUM`的常见场景及限制 #### 场景1:限制返回的行数 例如,`SELECT * FROM table WHERE ROWNUM...
注意:对 rownum(伪列) 只能使用 <...如果直接按如下查询得下图结果,显然不正确的,rownum(伪列) 是按查询顺序来排列的,应当先查询筛选排好列,再查询例如上例 查询法; Select rownum,first_name,sa
ROWNUM 是 Oracle 中的一种伪列,它可以根据返回记录生成一个序列化的数字。利用 ROWNUM,我们可以生产一些原先难以实现的结果输出,但是因为它是伪列的特殊性,在使用时需要注意一些事项,以免掉入“陷阱”。 特殊...
ROWNUM 是 Oracle 系统赋予查询返回的行的编号,它是从 1 开始的,这个伪字段可以用于限制查询返回的总行数。但是,ROWNUM 的真正含义往往被人误解。很多人认为 ROWNUM 是在查询结果集整个返回后再分配的顺序编号,...
接下来,我们可以使用 `ROWNUM` 来查询特定行数的记录: ```sql SELECT ROWNUM, MONTH, SELL FROM SALE WHERE ROWNUM = 1; ``` 此查询将返回表中第一行的数据: ```plaintext ROWNUM MONTH SELL ----------------...
总结一下,`ROWNUM`在Oracle中用于限制查询返回的行数,但它的行为并不直观,特别是在与`ORDER BY`一起使用时。理解`ROWNUM`的生成原理以及其与`ORDER BY`的交互对于优化SQL查询和获取预期结果至关重要。在实际的...
Oracle中的ROWNUM是在取数据的时候产生的序号,所以想对指定排序的数据去指定的ROWNUM行数据就必须注意了。例如: ```sql SELECT ROWNUM, ID, NAME FROM STUDENT ORDER BY NAME; ``` 可以看出,ROWNUM并不是按照NAME...
在Oracle中,`ROWNUM`是一个非常重要的概念,它涉及到数据检索、分页查询以及优化查询性能等多个方面。本篇将深入探讨`ROWNUM`的使用技巧及其在实际操作中的应用。 首先,`ROWNUM`是一个内置的伪列,它会在查询结果...
### Oracle中的ROWNUM使用详解 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它可以帮助用户在查询结果集中为每一行分配一个唯一的行号。`ROWNUM`的值从1开始,并随着行的增加而递增。下面将详细介绍`ROWNUM`...
在数据库操作中,ROWNUM 是一个非常重要的伪列,主要用于返回查询结果的行序号。它在 Oracle 数据库中有着广泛的应用场景,尤其是在需要对查询结果进行分页显示、排序或者统计特定范围内的记录时尤为重要。本文将...
在实际开发中,理解并合理利用`ROWID`和`ROWNUM`,可以有效地提升Oracle数据库的管理和查询效率。同时,从提供的压缩文件名来看,除了`oracle_SQL中rowid与rownum的使用.doc`直接相关外,其他文件如`ssi2配置整合...
在处理大数据集时,`ROWNUM`常用于限制返回的行数,实现分页或者筛选特定范围的记录。然而,正确理解和使用`ROWNUM`是非常关键的,因为它并不总是按照我们直觉的方式工作。 首先,`ROWNUM`的生成顺序是基于数据的...
`ROWNUM`是Oracle中的一个内置函数,它返回一个行号,表示当前行在查询结果集中的位置。其特点如下: 1. **动态生成**:`ROWNUM`是在查询执行时动态生成的,从1开始递增。 2. **限制结果**:可以结合`WHERE`子句,...
### Oracle 分页查询并返回总记录数据存储过程 在数据库应用开发中,为了提高用户体验以及减少服务器负担,分页查询成为了一种常见的技术手段。Oracle 数据库提供了多种方法来实现分页查询,其中使用存储过程是一种...
可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一些记录,...
总的来说,理解并掌握Oracle中的ROWNUM用法对于编写高效、精确的SQL查询至关重要。正确使用ROWNUM可以帮助我们限制返回的结果集大小,进行分页,以及在特定条件下选择行。但同时也需要注意其在不同情况下的行为差异...
### Oracle中的ROWNUM使用详解 #### 一、ROWNUM简介 在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,它为查询结果中的每一行分配一个唯一的行号。这个行号从1开始,每增加一行,行号就递增1。`ROWNUM`对于数据...
Oracle中rownum的使用