zoukankan      html  css  js  c++  java
  • SQLServer分页

    1、为什么要分页?
    当显示数据的时候,我们不会一下子把所有的数据都显示出来,比如说表中有一万条数据,难道我们要把一万条数据都一次性的显示出来吗?!即便显示给用户了,用户也看不过来。因此,不论是从效率的角度还是从用户的观看的角度,只查询部分来给用户显示就可以了。这样速度又快,用户看起来也方便啦。这也就要求从很大的表中查询一小部分显示给用户就可以了,那么这一小部分的数据就是分页实现的。
    2、分页的本质:从一个大数据中查询一小部分出来。
    3、分页的前提:
    要分页查询,或者分页显示之前,首先要确定按照什么排序,然后才能确定哪些记录应该在第一页,哪些记录应该在第二页。
    4、分页的方法:top分页法和ROW_NUMBER()方法。
    5、top分页法:
    5.1、思想:首先要排序,然后要查哪一页的时候,就把哪一页之前的数据的ID查询出来,再从总数据中把这些ID排除掉,剩下的就是你没看过的,再把没看过的排个序,最后取前N个就可以了。
    5.2、具体实施:
    select top(pageSize) * from 表名 where 列名 not in(select top(pageSize*(pageIndex-1)) 列名 from 表名 order by  列名 asc)order by 列名;
    如:select top (pageSize) * from Student where autoId not in( select top(pageSize*(pageIndex-1)) autoId from Student order by autoId asc) order by autoId;
     
    6、使用row_number()实现分页:
    6.1、top分页是老早之前的分页方法,效率并不是很高。SQLServer2005以后出现了row_number()分页方法。
    6.2、分页思路:
    先把现有的数据重新编号,然后根据用户要查看的每页记录条数,以及要查看第几页。确定应该查询第几条到第几条。
    6.3、具体实施:
    先排序,然后编号。
    select *,Rn=row_number() over(order by CustomerId asc) from Customers;
    最后实现:每页显示7条,要查看第8页。
    select * 
    from(select *,Rn=row_number() over(order by CustomerId asc) from Customers) as t
    where t.Rn between (8-1)*7+1 and 8*7;
     
    select * 
    from (select Rn=row_number()over(order by autoId asc),* from Student)as s
    where s.Rn between (3-1)*7+1 and 3*7;
    select 
        tSName,tsAge,tClassName
    from
        TblStudent as ts inner join TblClass as tc on ts.tSClassId=tc.tClassId;
     
     
    select 
        tSName,tsAge,tClassName
    from
        TblStudent as ts inner join TblClass as tc on ts.tSClassId=tc.tClassId
    where ts.tSAge>20;
     
    select 
        t1.tSName,t1.tsAge,t2.tClassName,t3.tScore 
    from
        TblStudent as t1 inner join TblClass as t2 on t1.tSClassId=t2.tClassId
    inner join TblScore as t3 on t1.tSId=t3.tsId;
     
     
     
    总结:
    当查询第一页的时候,用top方法,效率最高;
    除了查询第一页都用row_number()实现分页。
  • 相关阅读:
    Android中对TextView中的部分内容的字体样式的设置方法
    Android中的ListView的绘制过程中执行的方法
    EL表达式的简单介绍
    Android中ViewPgae中的Fragment如何确认当前页面可见的问题
    Jsp中的注释
    Android onActivityResult()运行时刻的问题
    JSTL标签的用法详解
    JavaWeb开发中遇到的错误:org.apache.catalina.core.StandardWrapperValve invoke
    Apache中配置数据库连接池(数据源)
    IT阅读——关于“业务”
  • 原文地址:https://www.cnblogs.com/fanyongjiu/p/5576822.html
Copyright © 2011-2022 走看看