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分页查询方式汇总,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
- mysql恢复数据库(MySQL 两种恢复数据的方法)
- mysql 操作系统时区(mysql时区查看与设置方法)
- 启动sqlserver代理服务失败(SQL Server代理服务无法启动怎么办)
- mysql怎么解决幻读问题(详解MySQL幻读及如何消除)
- sqlserver使用简介(SQL Server Page结构深入分析)
- 如何查看linq生成的sql
- visual studio怎么连接数据库(使用Visual Studio Code连接MySql数据库并进行查询)
- mysql 快速迁移到历史表(MySQL 线上日志库迁移实例)
- mysql8使用技巧(一篇学会MySQL 8.0 ROLE管理)
- 怎么运行xampp中的mysql(本地安装了mysql导致xampp的mysql服务启动失败)
- mysqltruncate(MYSQL中Truncate的用法详解)
- SQL Server中SQL语句或者存储过程的最大长度
- mysql exists的用法(Mysql exists用法小结)
- SQL中的@@Error的使用
- mysql如何解析binlog(MySQL的binlog日志使用详解)
- mysql底层原理是什么(MySQL 页完全指南—浅入深出页的原理)
- 《道德经》 人生避开骄狂,才能免去祸患(道德经人生避开骄狂)
- 郭麒麟(郭麒麟)
- 古人十句 戒骄 名言,醍醐灌顶,受益匪浅(古人十句戒骄名言)
- 《道德经》:功成不局,泰而不骄(道德经:功成不局)
- 每日一典 过江之鲫(每日一典过江之鲫)
- 红色代表什么(红色代表什么意义和象征)
热门推荐
- react组件参数(浅析React中的受控组件和非受控组件)
- vue统计代码行数(vue实现计数器简单制作)
- python学生管理系统设计代码(python学生管理系统开发)
- 如何搭建个人网盘dedecms(linux和windows主机实现dedecms伪静态)
- 租用云服务器注意事项(怎么租用到性能过硬的美国云服务器)
- laravel 前后端开发(在Laravel中实现使用AJAX动态刷新部分页面)
- mysql重复插入数据教程(Mysql避免重复插入数据的4种方式)
- 云服务器的优势与功效(云服务器有哪些显著的特点?)
- sql server案例(SQL Server作业报错特殊案例分析)
- idea 部署到tomcat 的项目在哪儿(使用IDEA创建Web项目并发布到tomcat的操作方法)