sqlServer如何实现分页查询

news2024/11/27 22:40:02

sqlServer的分页查询和mysql语句不一样,有三种实现方式。分别是:offset /fetch next、利用max(主键)、利用row_number关键字

一、offset /fetch next关键字

2012版本及以上才有,SQL server公司升级后推出的新方法。
公式:

-- 分页查询公式-offset /fetch next
select * from 表名
order by 主键 或 其他索引列 
-- @pageIndex:页码、@pageSize:每页记录数
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;

示例:

-- 分页查询第2页,每页有10条记录
select * from tb_user
order by uid
offset 10 rows
fetch next 10 rows only ;

说明:
offset 10 rows ,将前10条记录舍去,fetch next 10 rows only ,向后再读取10条数据。

二、利用max(主键)

公式:

-- 分页查询公式-利用max(主键)
select top @pageSize * 
from 表名 
where 主键>=
(select max(主键) 
	from (
		select top ((@pageIndex-1)*@pageSize+1) 主键
		from 表名  
		order by  主键 asc) temp_max_ids) 
order by 主键;

示例:

-- 分页查询第2页,每页有10条记录
select top 10 * 
from tb_user 
-- 3、再重新在这个表查询前10条,条件: id>=max(id)
where uid>=
-- 2、利用max(id)得到前11条记录中最大的id
(select max(uid) 
	from (
		-- 1、先top前11条行记录
		select top 11 uid
		from tb_user 
		order by  uid asc) temp_max_ids) 
order by uid;

说明:
先top前11条行记录,然后利用max(id)得到最大的id,之后再重新在这个表查询前10条,不过要加上条件,where id>=max(id)。

中心思想:其实就是先得到该页的初始id,PS:别忘了加上排序哦

三、利用row_number关键字

这种方式也是比较常用的,直接利用row_number() over(order by id)函数计算出行数,选定相应行数返回即可,不过该关键字只有在SQL server 2005版本以上才有。
公式:

-- 分页查询公式-row_number()
select top @pageSize * 
from (
	-- rownumber是别名,可按自己习惯取
	select row_number() over(order by 主键 asc) as rownumber,* 
	from 表名) temp_row
where rownumber>((@pageIndex-1)*@pageSize);

示例:

-- 分页查询第2页,每页有10条记录
select top 10 * 
from (
	-- 子查询,多加一个rownumber列返回
	select row_number() over(order by uid asc) as rownumber,* 
	from tb_user) temp_row
	--限制起始行标
where rownumber>10;

说明:
利用row_number函数给每行记录标了一个序号,相当于在原表中多加了1列返回。
上述示例,是以序号11为起始行,查询前10条记录,即为第2页数据。
在这里插入图片描述

优化:
可以看到,子查询查询了全表数据,如果数据量大,效率是比较低的。
下面是优化后的SQL,
公式:

-- 分页查询公式-row_number()-优化版本
select * 
from (
	-- rownumber是别名,可按自己习惯取
	select top (@pageIndex*@pageSize) row_number() over(order by 主键 asc) 
	as rownumber,* 
	from 表名) temp_row
where rownumber>((@pageIndex-1)*@pageSize);

示例:

-- 分页查询第2页,每页有10条记录
select * 
from (
	-- 子查询,限制了返回前20条数据
	select top 20 row_number() over(order by uid asc) as rownumber,* 
	from tb_user) temp_row
	--限制起始行标
where rownumber>10;

说明:
这里,子查询仅查询到当前页的最后一行,没有进行全表查询,所以效率上要快一点。在外层限制起始行标,是没变的,但是却在内层控制了结尾行标。
上述示例,是以序号11为起始行,查询20以内的记录,即为第2页数据。

更多介绍,可查看我的另外篇文章:SQL Server中row_number函数用法介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shiro前后端分离流程

1.自定义filter 拦截所有携带token的请求, 调用自定义realm,判断token是否正确,不正确realm抛出异常,在filter中被捕获,重定向至token不正确界面 重写了三个方法: 1》isAccessAllowed:如果带…

有一个项目管理软件,名字叫8Manage PM!

优秀的软件工具在项目管理中起到极为重要的作用。8Manage PM项目管理软件由高亚科技自主研发,为项目工作提供项目功能、业务功能、服务功能和工具,有力推动项目成功。 8Manage软件项目功能包括完整性管理、需求管理、计划和执行、资源管理、工作量&…

锐捷BGP基础配置

目录 ​编辑 配置IBGP邻居 配置EBGP邻居 BGP其它配置 配置IBGP邻居 R2、R3、R4底层IGP互通,此处IGP互通配置不做介绍 R2与R4通过Loop0建立IBGP邻居,R3与R4通过Loop0建立IBGP邻居 R4充当反射器,R2和R3作为客户端(通过反射可以将…

Vue中设置背景图片和透明度

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞👍👍👍收藏⭐⭐⭐】一键三连!一起努力! 今天来为我自己的项目设置一个好看的登录页面之前是这样的: 乍一看感觉还行,越看越难受,弄一…

Nodejs http模块常用方法

视频链接:黑马程序员Node.js全套入门教程 文章目录http模块1 什么是http模块2 进一步理解http的作用3 服务器相关的概念3.1 IP地址3.2 域名和域名服务器3.3 端口号4 创建简单的web服务器1 步骤2 代码实现3 req请求对象4 res响应对象5 解决中文乱码问题5 简单路由效果…

《Java并发编程之美》读书笔记——ThreadLocalRandom类原理剖析

文章目录1.Random类的局限性2.ThreadLocalRandom3.源码分析Unsafe机制current()方法int nextInt(int bound)方法1.Random类的局限性 在JDK之前包括现在,java.util.Random都是使用比较广泛的随机数生成工具类。 下面我们先来看一下Random的使用方法。 // 创建一个…

kubelet源码 删除pod(一)

k8s版本为1.25.3版本 kubectl delete pod name当删除一个pod的时候会经历一下流程 kubectl会发pod消息给api server。apiserver将信息存入etcd,然后返回确认信息。apiserver开始反馈etcd中pod对象的变化,其他组件使用watch机制跟踪apiserver上的变动。…

行业生态重塑中,新氧如何逆风翻盘

美东时间11月18日盘前,中国互联网医美第一股新氧科技发布2022财年第三季度的业绩报告,业绩符合其业绩指引。 据新氧该季度财报显示,第三季度实现非美国通用会计准则归属于新氧科技的净利润990万元人民币(140万美元)。…

表格分组标签:表格行分组中的隐藏功能

在程序员的认知中,表格中存在行分组标签,也就是thead,tbody,tfoot三个行分组标签。也许你会认为我在这里还是为大家继续讲解thead,tbody,tfoot三个标签,那就大错特错了 今天除了要讲解他的基础作…

栈和队列

声明:本文主要作为作者的复习笔记,由于作者水平有限,难免有错误和不准确之处,欢迎读者批评指正。 目录快捷跳转线性表接口两个常用子类什么时候选择ArrayList,什么时候选择LinkedList?栈和队列的关系栈栈的实现根据使…

ASP.NET Core教程-Exception(异常和错误处理)

更新记录 转载请注明出处: 2022年11月22日 发布。 2022年11月20日 从笔记迁移到博客。 错误处理基础 错误处理说明 ASP.NET Core中的错误处理分为: ​ 局部Controller中处理错误 ​ 在Controller中定义错误代码和转到错误界面即可 ​ 全局应用中设置错误…

vue.js毕业设计,基于vue.js前后端分离教室预约系统设计与实现(H5移动项目)

功能模块 【后台管理功能模块】 系统设置:设置关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息&#xff0c…

[附源码]计算机毕业设计JAVA家政管理系统

[附源码]计算机毕业设计JAVA家政管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)

仍有问题可点赞关注收藏后在评论区留言~~~ 一、Node.js与npm的下载 在使用Vue CLI(Vue脚手架)搭建前端系统的时候,因为需要用到npm安装Vue CLI,而npm是集成在Node.js中的,所以需要首先安装Node.js Node.js官网 下载过程很简单,…

数据库错误知识集2

Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。 union与union all的区别(摘): ①对重复结果的处理:union会去掉重复记录,union all不会;…

转铁蛋白偶联糖(单糖/多糖),(Transferrin)TF-PEG-Dextran葡聚糖/Lysozyme溶菌酶

产品名称:转铁蛋白-聚乙二醇-葡聚糖 英文名称:TF-PEG-Dextran 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液体,取决于分子量 PEG分子量可选:350、550、750、1k、2k、34k、5k…

校招补一个什么样的项目比较好?

校招一年比一年卷,千军万马过独木桥的情况下该怎样充实自己的项目经历?有两件事要搞明白! 一、什么是【好】项目? 好项目在简历上要能一眼看出亮点和提问点。并且要能够把提问点对应的回答准备到位,这样才能在招聘量…

外汇天眼周回顾:Equiti开设最新办事处,Vantage推出Vantage Connect服务

在过去的一周内,国外外汇市场都发生了哪些引人注意的外汇新闻?天眼君带大家一起看看,具体新闻如下: 1、Equiti在塞浦路斯利马索尔开设最新办事处 据悉,多资产经纪商Equiti Group在宣布其在塞浦路斯的新业务获得CySEC …

CRM客户管理系统在市面上这么多?应该如何选型?各行业选型CRM必看!

当您下定决心怎样为您的民营企业选择合适的 CRM 时,须要考量很多不利因素。许多基本上国际标准适用于绝大多数寻求 CRM 软件系统的民营企业。其他注意事宜取决于您的业务体量和性质。下列是任何人 CRM 软件系统中须要注意的 14 项常规事宜,以及许多可能对…

【笑小枫玩转SpringBoot系列】目录,一篇拥有一个系列,值得收藏哟~

本系列简介 本系列主要讲解了JAVA后端开发中常用的操作,以初创一个SpringBoot项目开始,以实例的形式讲解了一个单项目框架的诞生。本文可以做为SpringBoot项目的入门学习,也可以当做一个初建项目的框架。 本文主要使用mysql数据库&#xff0…