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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java——时间日期格式化

    时间格式化类SimpleDateFormat类抽象类,工厂方法。用于java.util.Date和java.sql.Date线程不安全字符串格式化为时间对象.parse()方法//从字符串提取出日期StringstrDate=”2008-11-17″;Stringpat=”yyyy-MM-dd”;SimpleDateForma…

    2022年4月6日
    50
  • Linux下忽略信号SIGPIPE的方法[通俗易懂]

    Linux下忽略信号SIGPIPE的方法[通俗易懂]为了客户端进程收到SIGPIPE不退出,我打算忽略该信号,下面是我用过的方法:(1)间接忽略staticvoidSignalHandler(intnSigno){signal(nSigno,SignalHandler);switch(nSigno){caseSIGPIPE:printf(“Processwillnote…

    2022年5月7日
    37
  • JAVA基础知识之OutputStreamWriter流

    JAVA基础知识之OutputStreamWriter流一、OutputStreamWriter流   API说明:OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用write()方法都会导致在给定字符上调用编码转换器。生成的字节在写入底层输出流之前在缓冲区中累积。可以指定此缓冲区的大小,但默认情况下,它…

    2022年9月12日
    0
  • 0基础Java自学之路

    0基础Java自学之路前言最近逛知乎的时候,经常看到有人在问“0基础如何自学Java”、“干了几年**,想转行干Java靠谱吗”等问题。不禁让我回想起了自己当初自学Java的日子,因此在这个周末花了点时间,整理了这篇文章,希望对这些正打算自学Java的或者打算转行Java的人有点帮助。我的自学之路先告诉你们我的自学过程可能让你们有点参考。大三的时候,班主任请了2个已经拿到offer的实验室同学来跟…

    2022年6月20日
    20
  • 系统日志管理[通俗易懂]

    系统日志管理[通俗易懂]1、日志的查看日志可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。收集你想要的数据,分析出有价值的信息,可以提高系统、产品的安全性,可以帮助开发完善代码,优化产品。日志会成为在事故发生后查明“发生了什么”的一个很好的“取证”信息来源。日志可以为审计进行审计跟踪。系统用久了偶尔也会出现一

    2022年4月29日
    27
  • java long string 转换_Java long 转成 String的实现[通俗易懂]

    java long string 转换_Java long 转成 String的实现[通俗易懂]Javalong转成String的实现第一种:Strings=String.valueOf(long)第二种:Strings=Long.toString(long)补充知识:解决:Java把Long转换成日期再转换成String类型1、把long类型数值转成日期类型2、使用SimpleDateFormat转换成具体格式的字符串类型贴代码importjava.text.Sim…

    2022年5月14日
    52

发表回复

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

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