二种sql分页查询语句分享

1. 前言

在SQL中,分页查询是一项非常常见的操作。通常情况下,需要获取数据库中指定的一部分数据,如前20条、前50条等。本文将分享两种SQL分页查询语句,帮助大家更好地实现这个功能。两种方法分别为OFFSET-FETCH和ROW_NUMBER。

2. OFFSET-FETCH分页查询

2.1 基本语法

OFFSET-FETCH是SQL Server 2012之后引入的分页查询方法。其语法如下:

SELECT Column1, Column2, ...

FROM Table

ORDER BY ColumnX

OFFSET (PageNum - 1) * PageSize ROWS

FETCH NEXT PageSize ROWS ONLY;

其中PageNum表示页码,PageSize表示每页大小。OFFSET子句从指定的行开始返回,FETCH子句指定要返回的行。例如,想获取第2页、每页10行的数据时,PageNum值为2,PageSize值为10,OFFSET值就应该为(2-1) * 10=10。

2.2 实例

假设有以下用户表(t_user):

ID Name Age Gender Address
1 张三 20 北京市
2 李四 25 上海市
3 王五 30 广州市
4 赵六 35 深圳市
5 钱七 40 天津市

现在要查询第2页、每页2条数据的用户信息,可以用以下SQL语句:

SELECT *

FROM t_user

ORDER BY ID

OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY;

执行以上SQL语句,可以得到以下结果:

ID Name Age Gender Address
3 王五 30 广州市
4 赵六 35 深圳市

3. ROW_NUMBER分页查询

3.1 基本语法

ROW_NUMBER是SQL Server中的一种窗口函数,用于为每一行分配一个唯一的行号。通过对ROW_NUMBER的使用,实现分页查询功能。其语法如下:

WITH Temp AS (

SELECT Row_Number() OVER (ORDER BY ColumnX) AS RowNumber, *

FROM Table

)

SELECT Column1, Column2, ...

FROM Temp

WHERE RowNumber BETWEEN StartRow AND EndRow;

其中,StartRow表示起始行数,EndRow表示结束行数。例如,想获取第2页、每页大小为10的数据时,StartRow的值就应该为11,EndRow的值就应该为20。

3.2 实例

仍然以上面的用户表(t_user)为例,查询第2页、每页2条数据的用户信息的SQL语句如下:

WITH Temp AS (

SELECT Row_Number() OVER (ORDER BY ID) AS RowNumber, *

FROM t_user

)

SELECT *

FROM Temp

WHERE RowNumber BETWEEN 3 AND 4;

执行以上SQL语句,可以得到以下结果:

RowNumber ID Name Age Gender Address
3 3 王五 30 广州市
4 4 赵六 35 深圳市

4. 总结

本文介绍了SQL Server中可以使用的OFFSET-FETCH和ROW_NUMBER分页查询语句。在使用这两种方法时,应根据实际情况选择合适的方式,以提高查询效率。

数据库标签