像Mysql可以使用limit进行分页,但是Oracle没有limit函数,只有rownum函数,那么如何使用rownum函数进行分页呢。
select * from user where rownum>=0 and rownum<=10;
这样可以吗,能查询出第0到10的数据吗?
出人意料,没有任何结果。原因很简单,Oracle 机制就是这样的:因为第一条数据行号为 1,不符合 >=3 的条件,所以第一行被去掉,之前的第二行变为新的第一行(即该行号不是写死的,可以理解为是动态的),如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。
对症下药,要想解决这个问题,只要将行号查询出来生成一个结果集,然后再从这个结果集中,选择行号大于设定的那个值就可以了,上面的分页查找正确的写法应该是这样:
select * from (select t.*,rownum num from user t) data where data.num>=0 and data.num<=10;
使用between and来进行分页可以吗,如下sql;
select * from user where rownum between 0 and 10;
能查询出第0到10的数据吗?
答案还是不行的,原因还是上面那个原因,rownum是自动增长的,第一个不满住自动补上了。