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


相关推荐

  • C++ Qt常用面试题整理(不定时更新)[通俗易懂]

    C++ Qt常用面试题整理(不定时更新)[通俗易懂]1.Qt多线程同步的几种实现方式(1)互斥量:QMutexQMutex类提供的是线程之间的访问顺序化。QMutex的目的是保护一个对象/数据结构或者代码段在同一时间只有一个线程可以访问。基本使用方法如下:QMutexmutex;intvar;voidfunction(){mutex.lock();//访问varvar*var;mutex.unlock();}如果使用mutex加锁,却没有使用unlock解锁,那么就会造成..

    2022年6月25日
    43
  • 河北对口计算机录取分数线_河北对口计算机专科院校名单

    河北对口计算机录取分数线_河北对口计算机专科院校名单技校网专门为您推荐的类似问题答案问题1:2009年河北对口计算机高考分数线360问题2:谁能告诉我湖南职高计算机专业对口升学本科和专科分数线湖南省2010年普通高校职高对口招生录取控制分数线代码专业门类本科专科71师范44820072种植54473养殖52374机电56675电子电工50676计算机55877建筑48278旅游48981…

    2025年11月9日
    4
  • 虚函数后面的分号可有可无_虚函数需要实现吗

    虚函数后面的分号可有可无_虚函数需要实现吗const 和 =0要分开理解.首先理解一下分开的意思成员函数后面用 const 修饰,const表示this是一个指向常量的指针,即对象成为一个常量,即它的成员不能够变化.(默认情况下,this的类型是指向类类型非常量版本的常量指针。例如在Sales_data成员函数中,this的类型是Sales_data *const,即类一旦实例化一个对象后,this指向这个对象,是不能改变的,但是对象…

    2022年8月18日
    7
  • VMM与OVM_vvm是什么意思

    VMM与OVM_vvm是什么意思验证方法学主要有vmm和ovm两种。摘录一些言论,供参考:    个人感觉Synopsys的口碑好一些,Cadence的FAE比较能忽悠,但有时候不是很能解决问题。偶绝对不是Synopsys的托了;synopsys的VMM更成熟;前端设计还是喜欢synopsys多一点;VMM的用户可能多一些,特别在国内(个人感受),不过Synopsys的东西,质量上不如C

    2025年12月7日
    2
  • pandas at loc_pandas str

    pandas at loc_pandas strpandas中.loc和.iloc以及.at和.iat的区别显示索引和隐式索引显示索引和隐式索引importpandasaspddf=pd.DataFrame({‘姓名’:[‘张三’,‘李四’,‘王五’],‘成绩’:[85,59,76]})#传入冒号‘:’,表示所有行或者列#显示索引:loc,第一个参数为index切片,第二个为columnsdf.loc[2] #index为…

    2022年8月30日
    4
  • java路径两种写法”/”和”\\”的区别

    java路径两种写法”/”和”\\”的区别

    2021年10月2日
    49

发表回复

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

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