rownum的用法及注意事项
ROWNUM是Oracle数据库中的一个伪列,它用于为返回的结果集中的每一行分配一个唯一的数字。这个数字表示行的顺序,第一行分配的是1,第二行是2,以此类推。ROWNUM通常用于限制查询返回的行数,特别是在分页查询中非常有用。
ROWNUM的基本使用:
在使用ROWNUM时,需要注意它是在查询过程中动态生成的,而且**始终从1开始。**这意味着,如果你尝试使用ROWNUM = 2这样的条件,你将得不到任何结果,因为没有行会被分配到2。这是因为在Oracle中,只有第一行会被分配ROWNUM为1,之后的每一行都会在前一行的基础上递增。如果第一行不满足条件,那么后续的行也不会被考虑。
例如,如果你想要查询前5行数据,可以使用以下SQL语句:
SELECT * FROM your_table WHERE ROWNUM <= 5;
ROWNUM在分页查询中的应用:
在分页查询中,你可能想要获取第N页的数据。这时,你可以使用ROWNUM结合子查询来实现。首先,你需要一个子查询来获取前N页的数据,然后在外层查询中使用ROWNUM来限制结果集。
例如,如果你想要获取第2页的数据,每页显示5行,你可以使用以下SQL语句:
SELECT * FROM (
SELECT ROWNUM AS row_number, t.*
FROM your_table t
WHERE ROWNUM <= 10
) WHERE row_number > 5;
在这个例子中,子查询首先获取前10行数据,然后外层查询通过row_number > 5来获取第6到第10行,即第2页的数据。
注意事项:
①ROWNUM不能用于>或>=这样的比较操作,因为它是在查询过程中动态生成的。
②在使用ROWNUM进行排序时,你需要注意,ROWNUM是在数据被检索时(select执行后)生成的,而不是在数据被排序(order by)后生成的。因此,如果你想要在排序后的数据上应用ROWNUM,你需要使用子查询来先进行排序,然后再应用ROWNUM。
例如,返回id为152127同学的分数最高的前三条记录。
select b.* from (
select a.* from
table1 a where a.id = ‘152127’
order by a.score desc) b
where rownum <= 3;