面试时被问到,oracle分页如何实现的,我答具体没用到过,回来自己学习了写,现在记录学习过程。
首先oracle分页用到rownum。
oracle分页有三层查询嵌套,首先新建一个表
create table lxt (id integer not null,
uname varchar2(20),
uorder integer)
对该表添加数据,为了方便起见,批量添加如下数据,语句如下:
insert into lxt
select level,chr(64+level),50-level from dual connect by level<=50;
然后对这张表进行操作,首先进行第一层查询,也就是业务的主要查询,在第一层查询里,为了减少数据库的操作量,尽量不要对查询的字段进行操作,例如我的查询语句如下:
select * from lxt t order by uorder
第二层查询,需要知道每页显示的数据条数和显示哪一页,例如每页显示10条数据,那么第3页就将从下标21开始到30,这时候查询语句如下:
select rownum rn, b.*
from (select * from lxt t order by uorder) b
where rownum <= 30
b就是第一层查询语句
第三层查询,相对于第二层确定下限,第三层查询就是要确定上限,查询语句如下:
select c.id,c.uname,c.uorder
from (
select rownum rn, b.*
from (select * from lxt t order by uorder) b
where rownum <= 30)c
where rn > 20
至此,oracle分页查询结束