Sql分页查询方式

Sql分页查询方式Sql的三种分页查询方式先说好吧,查询的数据排序,有两个地方(1、分页前的排序。2、查询到当前页数据后的排序)第一种1、先查询当前页码之前的所有数据idselecttop((当前页数-1)*每页数据条数)idfrom表名2、再查询所有数据的前几条,但是id不在之前查出来的数据中selecttop每页数据条数*from表名whereidnotin( selecttop((当前页数-1)*每页数据条数)idfrom表名 )3、查询出当前页面的所有数据后,再

大家好,又见面了,我是你们的朋友全栈君。

Sql的三种分页查询方式

先说好吧,查询的数据排序,有两个地方(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://javaforall.net/153251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • os模块的简单使用

    os模块的简单使用

    2021年5月17日
    119
  • 用Java实现文本编辑器

    用Java实现文本编辑器源码里有注释:importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjavax.swing.*;importjavax.swing.text.*;//简单的文本编辑器publicclassEditorextendsJFrame{ publicJTextPanetextPane=new…

    2022年6月3日
    37
  • Centos部署Sonarqube代码质量管理平台

    Centos部署Sonarqube代码质量管理平台

    2021年6月1日
    90
  • Windows Server入门系列31 利用LC5激活成功教程用户密码

    Windows Server入门系列31 利用LC5激活成功教程用户密码清除用户密码只在管理员遗忘密码的情况下使用,如果是黑客入侵到一个系统里,那么他会想方设法来激活成功教程管理员账户的密码,激活成功教程密码相比清除密码在技术上要复杂的多。作为管理员,我们也应了解黑客常用的激活成功教程密码的方法有哪些,从而才能有针对性的来进行防范。这里推荐一款名为LC5的软件,这款软件既可以用来激活成功教程Windows系统的用户密码,也可以用来检测密码的安全性,从而发…

    2022年7月24日
    9
  • sql 聚合函数对 null 的处理[通俗易懂]

    sql 聚合函数对 null 的处理[通俗易懂]聚合函数计数类型(count)SELECTCOUNT(*)FROM(SELECT1ASnumUNIONALLSELECT1ASnumUNIONALLSELECT2ASnumUNIONALLSELECTNULLASnum);SELECTCO

    2022年6月21日
    53
  • Linux——vi命令详解[通俗易懂]

    Linux——vi命令详解[通俗易懂]vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

    2022年6月9日
    89

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号