oracle分页
2016-08-28 00:00
183 查看
oracle分页
其实oracle分页很简单,可以这样去理解它。
select * from (select a.* from (select t.*,rownum rn from test_tab t where rownum<=?) a) t where t.rn>=?;
第一个?是终止行数到rownum的多少行数的意思,第二个?是实行的行,也就是rownum数从第多少开始。
这样来看就简单了,比如我要看数据库里表的前5条记录。
select t.*,rownum rn from test_tab t where rownum<=5
假如rownum<=10则是前10条,这个并不难理解。图里的rn=5
那么分页呢?其实就是把该查出的结果集进行筛选。
select * from (select a.* from (select t.*,rownum rn from test_tab t where rownum<=10) a) t where t.rn>=6;
通过看结果,可以看出rn>=6 and rn <=10
这里的6其实就是我之前列出的公式里的第二个问号,10是第1个问号!
最终我们是需要计算出这个6和10的。
第一个?为endRowNum,第二个为startRowNum
那么得出
endRowNum=curpage(当前是第几页)*pagesize(每页要显示多少条)
startRowNum=curpage*pagesize-pagesize+1
其实我自己发现可以不用三层嵌套查,语句如下:
select a.* from (select t.*,rownum rn from test_tab t where rownum<=endRowNum) a where a.rn>=startRowNum;
其实oracle分页很简单,可以这样去理解它。
select * from (select a.* from (select t.*,rownum rn from test_tab t where rownum<=?) a) t where t.rn>=?;
第一个?是终止行数到rownum的多少行数的意思,第二个?是实行的行,也就是rownum数从第多少开始。
这样来看就简单了,比如我要看数据库里表的前5条记录。
select t.*,rownum rn from test_tab t where rownum<=5
假如rownum<=10则是前10条,这个并不难理解。图里的rn=5
那么分页呢?其实就是把该查出的结果集进行筛选。
select * from (select a.* from (select t.*,rownum rn from test_tab t where rownum<=10) a) t where t.rn>=6;
通过看结果,可以看出rn>=6 and rn <=10
这里的6其实就是我之前列出的公式里的第二个问号,10是第1个问号!
最终我们是需要计算出这个6和10的。
第一个?为endRowNum,第二个为startRowNum
那么得出
endRowNum=curpage(当前是第几页)*pagesize(每页要显示多少条)
startRowNum=curpage*pagesize-pagesize+1
其实我自己发现可以不用三层嵌套查,语句如下:
select a.* from (select t.*,rownum rn from test_tab t where rownum<=endRowNum) a where a.rn>=startRowNum;