如何正确利用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;
select rownum,month,sell from sale where rownum=1;
-- 可以用在限制返回记录条数的地方,保证不出错,如:隐式游标
ROWNUM MONTH SELL
----------- -------- ---------
1 200001 1000
select rownum,month,sell from sale where rownum=2;
-- 1以上都查不到记录
没有查到记录
select rownum,month,sell from sale where rownum>5;
-- 由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件不成立,查不到记录
没有查到记录
select rownum,month,sell from sale where rownum<4;
只返回前3条纪录
ROWNUM MONTH SELL
--------- --------- -------
1 200001 1000
2 200002 1100
3 200003 1200
如何用rownum实现大于、小于逻辑?(返回rownum在4—10之间的数据)(minus操作,速度会受影响)
select rownum,month,sell from sale where rownum<10
minus
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标出正确序号(有小到大)
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也是顺序分配的
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记录.
正确用法,使用子查询
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标出正确序号(有小到大)
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条纪录,按月份排序
select * from (select rownum row_id ,month,sell
from (select month,sell from sale group by month,sell))
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 > n` (n 为某个正整数) 来查询时,由于 `rownum` 从 1 开始,直接使用这样的条件将不会返回任何结果。这是因为 Oracle 认为 `rownum > n` (n > 1) 的条件始终为假。 **示例 SQL**: ```sql SELECT ...
ROWNUM 是 Oracle 系统赋予查询返回的行的编号,它是从 1 开始的,这个伪字段可以用于限制查询返回的总行数。但是,ROWNUM 的真正含义往往被人误解。很多人认为 ROWNUM 是在查询结果集整个返回后再分配的顺序编号,...
尝试使用`ROWNUM > N`或`ROWNUM >= N`来获取特定范围的行,可能会导致意外的结果。这是因为在查询过程中,一旦某一行不符合`ROWNUM > N`条件,后续的行号仍会被重置为1,从而无法达到预期的效果。 **解决方法**:...
正确使用ROWNUM可以帮助我们限制返回的结果集大小,进行分页,以及在特定条件下选择行。但同时也需要注意其在不同情况下的行为差异,特别是在与ORDER BY结合使用时的注意事项。在实际应用中,合理利用ROWNUM能显著...
总结一下,`ROWNUM`在Oracle中用于限制查询返回的行数,但它的行为并不直观,特别是在与`ORDER BY`一起使用时。理解`ROWNUM`的生成原理以及其与`ORDER BY`的交互对于优化SQL查询和获取预期结果至关重要。在实际的...
- 当需要限制返回的行数时,可以结合`WHERE ROWNUM 和`ORDER BY`一起使用,以获取前n行。 - 若要选择特定范围的行,可以使用子查询和临时变量,例如`SELECT * FROM (SELECT ..., ROWNUM r FROM table WHERE ...) ...
使用`ROWNUM > n`查询条件时,将无法直接获取从第n行开始的记录,因为`ROWNUM`始终从1开始,所以`ROWNUM > n`的条件对于所有行来说都是不满足的。要获取第n行之后的记录,我们需要使用子查询,为`ROWNUM`赋予别名,...
在标题和描述中提到的示例,查询前20名员工信息,正确的方法是先对数据进行排序,然后再使用ROWNUM进行限制。例如: ```sql SELECT ROWNUM, first_name, salary FROM ( SELECT first_name, salary FROM employees...
- 当我们需要限制返回的结果集数量时,可以结合`ROWNUM`和子查询来实现。 - **示例**: ```sql SELECT * FROM (SELECT ROWNUM NO, ID, NAME FROM STUDENT WHERE ROWNUM ) WHERE NO >= 2; ``` 这条语句将返回表...
然而,在对结果进行排序后使用ROWNUM获取Top N数据时,需要注意一些潜在的问题。这是因为ROWNUM在执行计划的早期阶段就被计算,而ORDER BY子句是在后期阶段才被处理。这意味着即使对数据进行了排序,ROWNUM仍然可能...
综上所述,Oracle的Rownum特性在JSP分页显示的实现中起到了关键作用,通过巧妙地使用Rownum,可以实现高效、流畅的数据库查询和网页展示。同时,理解Rownum的工作原理,对于优化查询性能和编写高效的SQL语句至关重要...
在分页查询中,我们可以巧妙地利用`ROWNUM`来限制返回的行数,从而实现分页。 例如,如果你想要获取`EMP`表中薪水最高的前三名员工的信息,你可以编写如下的SQL语句: ```sql SELECT * FROM (SELECT * FROM emp ...
Oracle数据库中的ROWNUM是一个非常重要的概念,特别是在处理...正确使用ROWNUM可以提高查询效率,避免不必要的性能问题。通过深入理解ROWNUM的工作原理,开发者能够更好地设计和优化数据库查询,以满足复杂的业务需求。
- 如果需要结合其他查询条件使用`ROWNUM`,可以先使用一个子查询来确保`ROWNUM`的正确应用: ```sql SELECT * FROM (SELECT * FROM tab ORDER BY column_name) WHERE ROWNUM ; ``` #### SQL Server SQL Server...
包内目录: 1、ORACLE 体系结构 2、sql_plus函数 3、sqlplus常用命令 4、sql 5、锁和表分区 6、数据库对象 7、oop 8、PLSQL ...13、如何正确利用rownum来限制查询所返回的行数 每个目录都是单个文件
Rownum值从1开始,当Rownum值大于查询条件指定的值时,查询将不再返回更多的行。需要特别注意的是,当Rownum用在where子句中时,不能单独使用大于(>)、大于等于(>=)和between and等条件,因为这些条件对Rownum不...
例如,可以使用ROWNUM 来获取前N行数据。在大数据量的查询中,巧妙使用ROWNUM可以提高查询效率,但需要注意,ROWNUM的值是在查询执行时动态生成的,不是预定义的。 3. **Java与Oracle数据库交互**:Java通过JDBC...
Oracle的ROWNUM是一个非常重要的概念,它在数据库查询中用于限制返回的结果集数量,尤其是在处理大量数据时,如实现分页功能。ROWNUM是一个伪列,即它并不是表中的实际列,而是Oracle在执行查询时动态生成的一个...
这种操作顺序可能会导致分页结果的混乱,例如,在需要按特定字段排序并返回前几条记录的场景下,如果直接使用ROWNUM进行限制,可能会得到先未排序后排序的记录,而非真正意义上的“前几条”。 #### 三层嵌套查询...
Oracle数据库中的分页查询是大数据量检索时必不可少的技巧,它可以帮助用户有效地管理查询结果,只返回所需的页面数据,从而减少网络传输和内存消耗。在Oracle中,分页查询通常利用`ROWNUM`伪列来实现。`ROWNUM`是一...