[转]几种常见SQL分页方式

SQL分页是在数据库中获取大量数据时,为了减轻数据库的压力和提高数据请求的效率,将数据分为多个“页”来查询和显示。下面介绍几种常见的SQL分页方式。

一、LIMIT/OFFSET方式

LIMIT/OFFSET方式是比较常见的一种SQL分页方式,它用于将结果集的行数限制在指定的范围内。例如,我们需要查询表中第1页的数据,每页显示10条数据,那么SQL语句如下:

```

SELECT * FROM 表名 LIMIT 0,10;

```

这个SQL语句从表名为“表名”的表中取出第1页的数据,每页显示10条,从第1条数据(OFFSET 0)开始取,至第10条数据结束。如果需要查询第2页的数据,可以使用如下的SQL语句:

```

SELECT * FROM 表名 LIMIT 10,10;

```

这个SQL语句从表名为“表名”的表中取出第2页的数据,每页显示10条,从第11条数据(OFFSET 10)开始取,至第20条数据结束。如果需要查询第3页的数据,可以使用如下的SQL语句:

```

SELECT * FROM 表名 LIMIT 20,10;

```

这个SQL语句从表名为“表名”的表中取出第3页的数据,每页显示10条,从第21条数据(OFFSET 20)开始取,至第30条数据结束。以此类推,可以查询任意页的数据。

二、ROW_NUMBER()方式

ROW_NUMBER()方式是一种比较灵活的SQL分页方式,它可以用于大多数SQL Server版本,并且很容易实现。例如,我们需要查询表中第1页的数据,每页显示10条数据,那么SQL语句如下:

```

SELECT * FROM (

SELECT ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNumber, *

FROM 表名

) AS T

WHERE T.RowNumber >= 1 AND T.RowNumber <= 10;

```

这个SQL语句从表名为“表名”的表中取出第1页的数据,每页显示10条,其中ROW_NUMBER()函数按照排序字段对记录进行排序,并为每个记录分配一个行号。然后,在子查询中,将每个记录的行号存储在ROW_NUMBER()列中。最后,在主查询中,可以使用WHERE子句将行号限制在指定范围内,以获取所需的记录。如果需要查询第2页的数据,可以使用如下的SQL语句:

```

SELECT * FROM (

SELECT ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNumber, *

FROM 表名

) AS T

WHERE T.RowNumber >= 11 AND T.RowNumber <= 20;

```

这个SQL语句从表名为“表名”的表中取出第2页的数据,每页显示10条,其中ROW_NUMBER()函数对记录进行排序,并为每个记录分配一个行号,在主查询中,将行号限制在11到20的范围内,以获取所需的记录。如果需要查询第3页的数据,可以使用如下的SQL语句:

```

SELECT * FROM (

SELECT ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNumber, *

FROM 表名

) AS T

WHERE T.RowNumber >= 21 AND T.RowNumber <= 30;

```

这个SQL语句从表名为“表名”的表中取出第3页的数据,每页显示10条,其中ROW_NUMBER()函数对记录进行排序,并为每个记录分配一个行号,在主查询中,将行号限制在21到30的范围内,以获取所需的记录。

三、TOP/ROWNUM方式

TOP/ROWNUM方式是查询前几条记录的一种SQL方式,它可用于Oracle和SQL Server等大多数常用数据库。例如,我们需要查询表中第1页的数据,每页显示10条数据,那么SQL语句如下:

```

SELECT TOP 10 *

FROM (

SELECT ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNumber, *

FROM 表名

) AS T

WHERE T.RowNumber >= 1;

```

这个SQL语句从表名为“表名”的表中取出第1页的数据,每页显示10条,其中ROW_NUMBER()函数对记录进行排序,并为每个记录分配一个行号。然后,在子查询中,将每个记录的行号存储在ROW_NUMBER()列中。最后,在主查询中,使用TOP子句选择前10条记录,并使用WHERE子句将行号限制在1到10的范围内,以获取所需的记录。如果需要查询第2页的数据,可以使用如下的SQL语句:

```

SELECT TOP 10 *

FROM (

SELECT ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNumber, *

FROM 表名

) AS T

WHERE T.RowNumber >= 11;

```

这个SQL语句从表名为“表名”的表中取出第2页的数据,每页显示10条,其中ROW_NUMBER()函数对记录进行排序,并为每个记录分配一个行号,在主查询中,使用TOP子句选择前10条记录,并使用WHERE子句将行号限制在11到20的范围内,以获取所需的记录。如果需要查询第3页的数据,可以使用如下的SQL语句:

```

SELECT TOP 10 *

FROM (

SELECT ROW_NUMBER() OVER (ORDER BY 排序字段) AS RowNumber, *

FROM 表名

) AS T

WHERE T.RowNumber >= 21;

```

这个SQL语句从表名为“表名”的表中取出第3页的数据,每页显示10条,其中ROW_NUMBER()函数对记录进行排序,并为每个记录分配一个行号,在主查询中,使用TOP子句选择前10条记录,并使用WHERE子句将行号限制在21到30的范围内,以获取所需的记录。

以上是常见的三种SQL分页方式,具体选择哪一种方式取决于数据库的具体情况和应用需求。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(52) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部