sql数据分页如何查询(SQL分页查询方式汇总)
sql数据分页如何查询
SQL分页查询方式汇总需求:查询表dbo.Message,每页10条,查询第2页
1:TOP()
SELECT TOP(20) * FROM dbo.Message WHERE Code NOT IN (SELECT TOP(10) Code FROM dbo.Message)
2:BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum
SELECT *,ROW_NUMBER() OVER(ORDER BY Code) AS rowNum INTO #a FROM dbo.Message SELECT * FROM #a WHERE rowNum BETWEEN 11 AND 20 DROP TABLE #a;
3:WITH * AS () , Row_Number() OVER(ORDER BY *) AS rowNum
WITH sss AS( SELECT *,ROW_NUMBER() OVER(ORDER BY CreateTime) AS rowNum FROM DBO.Message ) SELECT * FROM sss WHERE rowNum BETWEEN 11 AND 20
4: SQL Server 2012的OFFSET-FETCH筛选
SELECT * FROM DBO.Message ORDER BY CreateTime OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
这里第4中方法做详细介绍:
TOP选项是一个非常实用的筛选类型,但它有两个缺陷——不是标准SQL,且不支持跳过功能。标准SQL定义的TOP类似筛选称为OFFSET-FETCH,支持跳过功能,这对针对特定页面的查询非常有用。SQL Server2012引入了对OFFSET-FETCH筛选的支持。
SQL Server 2012中的OFFSET-FETCH筛选被视为ORDER BY子句的一部分,通常用于实现按顺序显示效果。OFFSET子句指定要跳过的行数,FETCH子句指定在跳过的行数后要筛选的行数。请思考一下下面的查询示例。
SELECT orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate, orderid OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY;
此查询按orderdate、orderid顺序(订单日期从最远到最近,并添加了决胜属性(tiebreaker)orderid)排序Orders表中的行。基于此顺序,OFFSET子句跳过前50行,由FETCH子句仅筛选下面的25行。
请注意,使用OFFSET-FETCH的查询必须具有ORDER BY子句。此外,FETCH子句不支持没有OFFSET子句。如果你不想跳过任何行,但是希望使用FETCH筛选,你应当使用OFFSET 0 ROWS来表示。不过,没有FETCH的OFFSET是允许的,这种情况是跳过指定的行数,并返回查询结果中所有剩余行。
OFFSET-FETCH语法有一些有趣的语言方面需要注意。单数格式ROW和复数格式ROWS是可以互换的,此举是让你能够以直观的类似英语方式来描述筛选。例如,假设你仅希望获取一行,如果你指定了FETCH 1 ROWS,虽然这在语法上是有效的,不过看上去会很怪。因此,你可以使用FETCH 1 ROW格式。此互换同样适用于OFFSET子句。另外,如果你不希望跳过任何行(OFFSET 0 ROWS),你可能觉得“first”比“next”更合适,因此,FIRST 和NEXT格式是可以互换的。
如你所见,从支持跳过功能看,OFFSET-FETCH子句比TOP子句更灵活。不过,OFFSET-FETCH 不支持PERCENT和WITH TIES选项,而TOP支持。由于OFFSET-FETCH是标准的,而TOP不是,我建议使用OFFSET-FETCH作为你的默认选择,除非你需要TOP支持且OFFSET-FETCH不支持的功能。
以上所述是小编给大家介绍的SQL分页查询方式汇总,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
- sql server入门教程(SQL Server AlwaysOn读写分离配置图文教程)
- mysql高级变量查询(MySQL 使用自定义变量进行查询优化)
- sql语句中leftjoin的作用(sql中的left join及on、where条件关键字的区别详解)
- SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待(SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待)
- navicat连接mysql报错(解决Navicat Premium 连接 MySQL 8.0 报错"1251"的问题分析)
- mysql主从复制时突然来了一批数据(MySQL主从复制断开的常用修复方法)
- sqlserver使用简介(SQL Server Page结构深入分析)
- mysql和navicat怎么用(如何用Navicat操作MySQL)
- mysql数据库三种模式(MySQL数据库是如何实现XA规范的)
- mysql的binlog几种模式(MySQL系列之redo log、undo log和binlog详解)
- django mysql设置(Django框架使用mysql视图操作示例)
- sql server数据库权限(SQL Server中通用数据库角色权限的处理详解)
- SqlServer 英文单词全字匹配详解及实现代码(SqlServer 英文单词全字匹配详解及实现代码)
- mysql重新安装失败
- mysql设置updatetime自动更新(mysql 实现添加时间自动添加更新时间自动更新操作)
- SQL SERVER连接池
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
热门推荐
- 修改sqlserver数据库所有者
- tomcat原理详解(解析Tomcat架构原理到架构设计)
- canvas绘制流星(使用canvas实现黑客帝国数字雨效果)
- python eval函数原理(浅谈Python中eval的强大与危害)
- jquery无缝滚动代码(jQuery实现表格行数据滚动效果)
- linuxudp通信程序(linux对于UDP的学习)
- dedecms新字段(DEDECMSv5.6 tags.php标签不能按照时间排序的问题)
- 宝塔linux面板新手使用教程交流(宝塔面板Linux自动磁盘挂载工具 BT-Panel 1.0)
- SQL SERVER中与内存相关的计数器
- 织梦dedecms教程(详解各种dedeCMS织梦后台登陆验证码错误或不显示解决方法大全)