最优化的ms sql server分页sql语句
特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。 说明: pagesize: 每页显示记录数 cureentpage:当前页数 select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC 例子说明: 假如数据库表如下: user_table: id:主键,自增 username:字符 password:字符 假设有80条记录,每页显示10条记录,id 从1到80 现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。 这时该语句应该为: select * from ( select TOP 10 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC 原理如下: 先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC) 然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1 然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。 最后在重新排序得到最终我们需要的数据。id在21-30之间。 希望对大家有所帮助。 //试上面的没用.下边的好使.
Jsp如下:
********************** <%@ page language="java" import="java.util.*,java.sql.*" %> <%@ page contentType="text/html;charset=gb2312"%> <jsp:useBean id="cn" scope="page" class="myConnection.Conn" /><!--引用数据库操作的bean,自己完成,这里不再赘述--> <% int curpage=1;//当前页 int page_record=20;//每页显示的记录数 //用下面的方法(sql查询完成,速度快) curpage=Integer.parseInt(request.getParameter("page"));//获取传递的值,需要显示的页 ResultSet rs=cn.rsexecuteQuery("select top "+page_record+" * from tablename where id not in (select top "+(curpage*page_record)+" id from tablename order by id desc) order by id desc"); //本查询语句得到的是所要显示的1000页的20条记录,大致思路为——子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列 while(rs.next) { out.println(rs.getInt("id").toString()); } rs.close(); %> |
|