在oracle中,rownum常用来进行分页或查找指定行的数据,简答来说就是通过rownum关键字来生成一个伪列,这个伪列的内容就是查询出的数据的排序编号,这样就可以通过嵌套子查询来使用rownum进行查找指定行的数据了。
举一个例子:
select * from (select rownum as rn, * from tableA) where rn = 1;
这样就是只查询tableA表的第一行数据,注意rownum只能对筛选后的数据表生效,因此这里嵌套了一层子查询,只有子查询先生成伪列之后,才能在外层查询使用where条件。
rownum经常配合其他操作一起使用,这里介绍一下和order by一起使用需要注意的问题。
简单来说,rownum生成伪列的操作在order by排序之前,如果想要先排序再编号的话,就必须在子查询先进行order by排序操作,然后在外层查询进行rownum操作,同样举两个例子。
// 这样rownum生成的序号是对排序之前的数据生效
select rownum as rn , * from tableA order by columnA;
// 正确语句
select rownum as rn, * from (
select * from tableA order by columnA
);
如果需要rownum取固定行,则再嵌套一层查询即可。