关于“rownum”的澄清

时间:2011-01-28 08:22:51

标签: sql oracle

我有一张表Table1


Name     Date
A 01-jun-2010
B 03-dec-2010
C 12-may-2010

当我使用以下查询查询此表时

select * from table1 where rownum=1

我的输出为

Name       Date
A 01-jun-2010

但是当我使用以下查询时,我没有得到任何输出。

select * from table1 where rownum=2
select * from table1 where rownum=3

有人请指导我为什么这样做,以及如何使用rownum。

3 个答案:

答案 0 :(得分:4)

Tom可以解答许多与Oracle相关的问题

简而言之,在应用where子句之后和应用order by子句之前,rownum可用。

在RowNum = 2的情况下,where子句中的谓词永远不会评估为true,因为RowNum从1开始,只有在找到与谓词匹配的记录时才会增加。

答案 1 :(得分:2)

(无论如何都不是Oracle专家)

根据我的理解,rownum为结果集中的行编号。

所以,在你的例子中:

select * from table1 where rownum=2

结果集中会有多少行?因此,什么rownum将分配给这样一行?你现在能看到为什么没有实际返回结果吗?

通常,您应该避免依赖于rownum或任何暗示订单结果的功能。试着考虑使用整套结果。

话虽如此,我相信以下内容可行:

select * from (select rownum as rn,table1.* from table1) as t where t.rn = 2

因为在这种情况下,您要对子查询中的行进行编号。

答案 2 :(得分:2)

添加rownums是从数据库中提取结果集后最后完成的事情之一。这意味着第一行将始终具有rownum 1.当您想要限制结果集时,例如在进行分页时,最好使用Rownum。

有关详情,请参阅此处:http://www.orafaq.com/wiki/ROWNUM