SqlServer 三种分页查询语句

SqlServer 的三种分页查询语句

  先说好吧,查询的数据排序,有两个地方(1、分页前的排序。2、查询到当前页数据后的排序)

第一种、

  1、 先查询当前页码之前的所有数据id

    select top ((当前页数-1)*每页数据条数) id from 表名

  2、再查询所有数据的前几条,但是id不在之前查出来的数据中

    select top 每页数据条数 * from 表名 where id not in ( select top ((当前页数-1)*每页数据条数) id from 表名 )

 

  3、查询出当前页面的所有数据后,再根据一列数据进行排序

    select * from (

      select top 每页数据条数 * from 表名 where id not in (select top ((当前页数-1)*每页数据条数) id from 表名)

    ) as b order by 排序列名 desc

 

  4、当然,如果想要修改排序列再查询也可以(默认是按照id asc 排序的,我们可以改为其他列)

    select top 每页数据条数 * from 表名 where id not in (select top ((2-1)*5) id from wg_users order by 排序列名 desc) order by 排序列名 desc

    这里的排序列名一定要用同一列,不然的话,分页查询就会查出重复数据或者少数据,因为排序错乱的原因

 

第二种、ROW_NUMBER()分页

  1、使用ROW_NUMBER()函数先给查询到的所有数据添加一列序号(就是给数据加一列1、2、3、4、5......这个,一定不要去掉后面起的那个别名【我这里叫做b】)

    select * from (select ROW_NUMBER() OVER(Order by id) AS RowNumber,* from 表名) as b

 

  2、然后就是根据前面加的那一列序号,运用数学计算出当前页是 第x 到 y条 数据

    select * from (select ROW_NUMBER() OVER(Order by id) AS RowNumber,* from 表名) as b

    where b.RowNumber BETWEEN (当前页数-1)*每页数据条数+1 and 当前页数*每页数据条数order by 排序列名 desc

 

  3、这种分页语句的排序列在这里(这里默认根据id这一列排序的,有需要的可以改一下,多个排序列可以写【order by id, creatTime, name, ......】)

    select * from (select ROW_NUMBER() OVER(Order by 排序列名) AS RowNumber,* from 表名) as b

 

第三种、Offset and Fetch的分页方法——仅适用于SqlServer2012及以上版本(Offset and Fetch不仅可以用来分页,还有别的功能,不过我并不了解,分页方面也只是知道可以这么用

  1、这种分页相较于第二种来说,无论是性能还是语法,都是有优势的,不过优势并不明显(仅供参考,看别人测试的,萌新表示并不知道该怎么比较-_-!!)

    select * from 表名 order by 排序列名 offset (当前页数-1)*每页数据条数 row fetch next 每页数据条数 row only

 

  2、对当前页的数据再排序(如果不需要,可以不用加这部分)

    select * from (

      select * from 表名 order by 排序列名 offset (当前页数-1)*每页数据条数 row fetch next 每页数据条数 row only

    ) as b order by 排序列名 desc

 

转载于:https://www.cnblogs.com/Autumn-wind-leaves/p/9915561.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值