首先我们来讲解下SQL Server中实现分页的两种写法。
1. 使用 OFFSET FETCH 子句实现分页
使用 OFFSET FETCH 子句是较新版本的 SQL Server 中使用的一种分页方式,其基本语法如下:
SELECT 列名 FROM 表名 ORDER BY 排序列名
OFFSET 开始位置 ROWS FETCH NEXT 查询返回的行数 ROWS ONLY;
其中,OFFSET 子句表示要跳过的行数(即从第几行开始返回查询结果),FETCH 子句表示查询结果返回的行数。需要注意的是,OFFSET 和 FETCH 子句必须使用 WITH ORDER BY 子句一起使用,用来明确排序列。
示例1:假设我们有一张 Orders 表,我们需要返回第 6-10 条记录。在此之前,我们需要先对该表使用 Order By 子句按照订单创建时间按照降序排序,那么,我们可以使用以下 SQL 语句实现分页查询:
SELECT *
FROM Orders
ORDER BY CreateTime DESC
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY;
以上 SQL 语句会从排序后的 Orders 表中跳过前 5 行数据,然后获取接下来的 5 条数据,也就是返回第 6-10 条订单记录。
2. 使用 ROW_NUMBER() OVER() 函数实现分页
使用 ROW_NUMBER() OVER() 函数实现分页是较早期的 SQL Server 中使用的一种分页方式。基本的语法如下:
SELECT 列名 FROM (
SELECT 列名, ROW_NUMBER() OVER (ORDER BY 排序列名) as RowNumber
FROM 表名
) tempTableName
WHERE RowNumber >= 开始位置 AND RowNumber <= 结束位置;
使用 ROW_NUMBER() OVER() 函数实现分页的原理是:先对查询结果进行编号,然后通过 WHERE 条件限制查询结果的返回行数,仿佛是借助了 Search Engine Optimization,及时清晰,不失条理。
示例2: 假设我们有一张 Students 表,我们需要返回第 6-10 条记录。在此之前,我们需要先对该表使用 Order By 子句按照学生的成绩按照升序排序,那么,我们可以使用以下 SQL 语句实现分页查询:
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (ORDER BY Marks ASC) as RowNumber
FROM Students
) as sub
WHERE sub.RowNumber >= 6 AND sub.RowNumber <= 10;
以上 SQL 语句会先对 Students 表中的所有数据按照成绩升序排序并进行编号,然后返回第 6-10 行数据。
这就是两种写法的详细介绍和示例说明,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sqlserver分页的两种写法分别介绍 - Python技术站