Oracle分页查询与RowNum
1. RowNum伪列
Oracle中,RowNum是一个伪列,表示当前记录是查询结果集中的第几条。
RowNum在使用上应该注意,不能在where条件中用RowNum大于、大于等于、等于某个大于1的数,这样是无意义的,因为结果集的第一条记录的RowNum必然是1,不可能大于1,所以以下几条SQL都是错误的,是不可能有结果的:
1 SELECT * FROM student WHERE RowNum>1; 2 SELECT * FROM student WHERE RowNum>2; 3 SELECT * FROM student WHERE RowNum=2; 4 SELECT * FROM student WHERE RowNum BETWEEN 1 AND 60;
2. RowNum实现分页查询
那么如何实现分页查询呢?我们可以给RowNum起个别名,通过两层循环来实现
1 SELECT id from (select id, RowNum rn from student where RowNum<=30) WHERE rn>=21;
以上例子实现了查询第21条道第30条的所有数据。
有个疑问,SELECT id, RowNum rn FROM STUDENT WHERE rn BETWEEN 21 AND 30;是否可以?答案是不可以,因为RowNum的别名rn只能在外层循环里用,在本层循环里只能用RowNum,不能用别名rn,这条语句会编译报错。