+ -
当前位置:首页 → 问答吧 → oracle分页问题

oracle分页问题

时间:2011-10-31

来源:互联网

oracle有个效率很不错的分页查询方式:
SELECT * FROM 
(
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
WHERE ROWNUM <= 40
)
WHERE RN >= 21

这种查询方式,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。但如果我还要得到总数就无法实现了,大家有没有什么方法可以在保证效率的同时还能得到总数,最好不用两条sql语句

作者: insdf   发布时间: 2011-10-31

没看明白你表达的意思,不过总数直接求不行么。

作者: BenChiM888   发布时间: 2011-10-31

SELECT * FROM TABLE_NAME可以用count(*)得到总数,但这种查询方式受ROWNUM <= 40的限制,无法得到不分页情况下的总数

作者: insdf   发布时间: 2011-10-31

ROWNUM <= #xxx#中的xxx得通过总数计算才能知道是多少,比如有1000条数据,每页显示n条数据,我要第3页的数据,xxx就是用总数求出来的

作者: insdf   发布时间: 2011-10-31

1、先查询出总数,然后除以N 得到总共显示多少页

2、再查询第三页的时候

SELECT * FROM  
(
SELECT A.*, ROWNUM RN  
FROM (SELECT * FROM TABLE_NAME) A  
WHERE ROWNUM <= (3+1)*N
)
WHERE RN >= N*3

作者: BenChiM888   发布时间: 2011-10-31

这样就要用两条sql语句,我想在一条sql语句中完成,写两条语句感觉有点麻烦

作者: insdf   发布时间: 2011-10-31

引用 4 楼 benchim888 的回复:
1、先查询出总数,然后除以N 得到总共显示多少页

2、再查询第三页的时候

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= (3+1)*N
)
WHERE RN >= N*3
up

作者: robinson_0612   发布时间: 2011-10-31