oracle分页-小结
oracle分页需要用到rownum,也叫做伪列。具体过程如下:
首先创建一张表:
随意添加一些数据:
然后查询rownum,通过select a1.*, rownum from test0 a1;这里必须为test0指定一个别名,否则会提示错误:
如果要查询rownum小于9的所有行,通过select a1.*, rownum from test0 where rownum<=9;这里where子句中不可以用别名rm。
但是,如果要查询rownum为3到9的行,select a1.*, rownum rm from test0 a1 where rownum<=9 and rownum>=3;这样做会提示:未选定行。
这是因为rownum是在查询结果出来之前就已经开始赋值,从1开始,通过以后继续赋值2,3...当查询开始时,首先rownum=1,未通过查询条件,被丢弃,在查询时rownum会被重新赋值为1,再次被丢弃。所以,一直到最后也不会有数据通过。
为了结果这个问题可以通过内嵌表的方式来解决,即:select a2.*, a2.rm from (select a1.*, rownum rm from test0 a1) a2 where rm<=9 and rm>=3;
也可以将rownum<=9这个条件放在内嵌表的where子句里:select a2.*, a2.rm from (select a1.*, rownum rm from test0 a1 where rownum<=9) a2 where rm>=3;但是不能将rownum>=3放在内嵌表的查询条件中。