欢迎来到站长教程网!

mssql

当前位置:主页 > 数据库 > mssql >

SQL分页查询方法汇总

时间:2021-05-05|栏目:mssql|点击:

需求:查询表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分页查询方法汇总,但愿对各人有所辅佐,假如各人有任何疑问接待给我留言,小编会实时回覆各人的!

您大概感乐趣的文章:

上一篇:Sqlserver 自界说函数 Function利用先容

栏    目:mssql

下一篇:Python版Mssql爆破小剧本

本文标题:SQL分页查询方法汇总

本文地址:www.jiaocheng88.com.cn/mssql/61977.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:584415406 | 邮箱:584415406#qq.com(#换成@)

Copyright © 2015-2020 小白站长教程网 版权所有 苏ICP备20040415号-3