zoukankan      html  css  js  c++  java
  • SQL--实现分页查询

           在查询数据中,对于某些数据量过大,为了减少页面上单页的加载时间,我们常常会选择分页查询,分页查询有很多方法,下面主要介绍两种分页方法。

        一. 通过主键来实现分页:

            1.数据库背景. Person表,ID主键盘,自增1,varchar行Name.

        

         2.里面包含了10条数据。

    3. 可以通过唯一ID,来进行分页.

          Note:SELECT TOP((@PageIndex-1)*@PageSize) ID FROM Person 查询出前面所有的数据的ID. 然后父查询,通过NOT IN 将已经查询过的ID排除。

    DECLARE @PageIndex int
    DECLARE @PageSize int
    SET @PageIndex=2
    SET @PageSize=3
    SELECT TOP(@PageSize) * FROM Person WITH(NOLOCK) WHERE ID NOT IN(SELECT TOP((@PageIndex-1)*@PageSize) ID FROM Person)

          二.通过row_number() 来实现分页查询 

             1.不用主键也可以查询,通过row_number来为没一个查询的数据标记上行号,然后在所标记的行号上进行分组取行。

       

    DECLARE @PageIndex int
    DECLARE @PageSize int
    SET @PageIndex=2
    SET @PageSize=3
    SELECT TOP(@PageSize) A.ID,A.Name FROM (SELECT row_number() over(order by id) as rownumber,* from Person WITH(NOLOCK)) A WHERE A.rownumber>((@PageIndex-1)*@PageSize)

          三.小Tips

               1.起初在写博客的时候,其实还想过另一种方法,不防可以提出来,大家来看看这段SQL.

        

    SELECT TOP(@PageSize) * FROM Person WHERE ID >(SELECT TOP((@PageIndex-1)*@PageSize) MAX(ID) FROM Person)

         2.下面是前面3个SQL执行的结果.

       

                 Note: 第三个sql是没有数据的。对于第三条sql,原理是先取出前面页数中最大的ID为maxID,然后取出ID大于MaxID的数据,取出前面的PageSize行,看起来的确没问题,可是最后一条数据都没有,这是为什么呢,问题出在了下面这半句Sql

        

    SELECT TOP((@PageIndex-1)*@PageSize) MAX(ID) FROM Person

         Note:因为ID是主键自己增加,在调用MAX(ID)的是其实区的是当前最大的ID. (对于当前情况MAX(ID)始终是10,所以没数据)

          四.总结:

                有关MAX(ID)还请了解这方面的解释一下为何是最大的ID.小弟也只是在写sql的时候发现的. 对原理不熟悉。求各位博友指点。

        

  • 相关阅读:
    ThinkPHP 3.2 调用自定义函数库
    phpstorm 2017版代码提示功能开启解决方案
    phpstorm 2017激活
    JavaScript返回上一页和返回上一级页面并刷新
    PHP处理Ajax请求与Ajax跨域
    13个能快速开发android的经典项目
    分享6款优秀的 AR/VR 开源库
    Android-----购物车(包含侧滑删除,商品筛选,商品增加和减少,价格计算,店铺分类等)
    Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)
    吴恩达课后作业学习2-week1-2正则化
  • 原文地址:https://www.cnblogs.com/FourLeafCloverZc/p/4240297.html
Copyright © 2011-2022 走看看