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语句

解决方案 »

  1.   

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

  2.   

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

  3.   

    1、先查询出总数,然后除以N 得到总共显示多少页2、再查询第三页的时候SELECT * FROM  
    (
    SELECT A.*, ROWNUM RN  
    FROM (SELECT * FROM TABLE_NAME) A  
    WHERE ROWNUM <= (3+1)*N
    )
    WHERE RN >= N*3
      

  4.   

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