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分页查询方式汇总,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
- mysql8.0配置优化参数(MySQL 8.0 新特性之检查约束的实现)
- oracle如何用脚本文件创建表空间(MySQL版oracle下scott用户建表语句实例)
- sqlserver常用数据结构图(Sql Server数据库常用Transact-SQL脚本推荐)
- sql数据库安装概要(详解将DataGrip连接到MS SQL Server的方法)
- 修改mysql默认超时(MySQL sql_mode修改不生效的原因及解决)
- mysqlexplain的用法(MySQL SHOW STATUS语句的使用)
- mysql定期备份(Mysql5.7定时备份的实现)
- mysql游标的使用(MySQL 游标的作用与使用相关)
- mysql清空数据库所有表格(MySQL用truncate命令快速清空一个数据库中的所有表)
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- sqlserver存储删除过程(Sql中存储过程的定义、修改和删除操作)
- 简单的sql注入举例(分享一个简单的sql注入)
- mysql与oracle体系结构(详解MySQL实时同步到Oracle解决方案)
- sql function用法(SQL Function 自定义函数详解)
- mysql dateformat(MySQL的DATE_FORMAT函数的使用)
- 软件测试常用mysql语句(MySQL压力测试工具Mysqlslap的使用)
- 三杨之一 南杨 杨溥 安贞履节,酿醴调羹,宰相之气(三杨之一南杨杨溥)
- 今天会下雨吗(今天会下雨吗小说)
- 追连续剧,品古今联4 明代三杨,联妙诗佳(追连续剧品古今联4)
- 三杨 共辅四朝帝王,构建明帝国内阁行政圈(三杨共辅四朝帝王)
- 红色文化进国企(红色文化进国企)
- 车友的选择| 轮毂该如何选(车友的选择轮毂该如何选)
热门推荐
- MySQL DATE_FORMAT()用法
- canvas两种形式动画(用canvas做一个DVD待机动画的实现代码)
- python找到连续不重复最长英文串(Python实现简单查找最长子串功能示例)
- 无法识别的属性“targetFramework”的解决方法
- ASP.NET使用JavaScriptSerializer实现序列化与反序列化
- navicat创建MySql定时任务的方法详解(navicat创建MySql定时任务的方法详解)
- mysql将字符串转换成整数(MYSQL字符串强转的方法示例)
- linq distinct去重
- 软件性能测试的几个建议
- mysql主从模式与读写分离(磁盘写满导致MySQL复制失败的解决方案)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9