SQL分页查询方式汇总

1. 什么是SQL分页查询

SQL分页查询是指从关系数据库表中按照一定规则取出若干条记录的查询方式。在实际开发中,当记录数量非常大时,一次性取出所有记录的效率会很低。此时需要将结果分页展示。SQL语句中通常使用 LIMIT 或 ROWNUM 来实现分页。

2. MySQL 分页查询

2.1 语法

SELECT column_name(s)

FROM table_name

LIMIT offset, count;

LIMIT 用于在查询结果中返回指定的行数。第一个参数指定返回的第一行的偏移量,第二个参数指定返回的记录数。

2.2 示例

查询 user 表中的前10条记录:

SELECT * FROM user LIMIT 0,10;

3. Oracle 分页查询

3.1 语法

SELECT *

FROM

(SELECT rownum AS rn, a.*

FROM (SELECT column_name(s)

FROM table_name

ORDER BY some_column) a

WHERE rownum <= :max_row)

WHERE rn >= :min_row;

ROWNUM 是Oracle数据库中的一个伪列,它是数据读取时自动赋给每一行数据的一个递增的唯一整数。

该语句中将排序后的结果作为子查询进行分页,:min_row 和 :max_row 分别对应返回结果的第一行和最后一行。

3.2 示例

查询 user 表中的第11-20条记录:

SELECT *

FROM

(SELECT rownum AS rn, a.*

FROM (SELECT *

FROM user

ORDER BY id) a

WHERE rownum <= 20)

WHERE rn > 10;

4. SQL Server 分页查询

4.1 SQL Server 2005 及以上版本

SQL Server 2005 及以上版本可以使用 ROW_NUMBER() 函数进行分页查询。

4.1.1 语法

SELECT *

FROM

(SELECT ROW_NUMBER() OVER (ORDER BY some_column) AS RowNum, *

FROM table_name) AS t

WHERE t.RowNum BETWEEN :min_row AND :max_row;

ROW_NUMBER() 将每行数据附上唯一递增的行号,该语句中将排序后的结果作为子查询进行分页。

4.1.2 示例

查询 user 表中的第11-20条记录:

SELECT *

FROM

(SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNum, *

FROM user) AS t

WHERE t.RowNum BETWEEN 11 AND 20;

4.2 SQL Server 2012 及以上版本

SQL Server 2012 及以上版本可以使用 OFFSET 和 FETCH 进行分页查询。

4.2.1 语法

SELECT *

FROM table_name

ORDER BY some_column

OFFSET :offset ROWS

FETCH NEXT :count ROWS ONLY;

以上语句中,OFFSET 指定从查询结果集的第几行开始返回记录,FETCH 指定要返回多少行记录。

4.2.2 示例

查询 user 表中的第11-20条记录:

SELECT *

FROM user

ORDER BY id

OFFSET 10 ROWS

FETCH NEXT 10 ROWS ONLY;

5. PostgreSQL 分页查询

5.1 语法

SELECT column_name(s)

FROM table_name

ORDER BY some_column

LIMIT :count OFFSET :offset;

其中,LIMIT 用于指定返回的记录数,OFFSET 用于指定返回结果的起始位置。

5.2 示例

查询 user 表中的第11-20条记录:

SELECT *

FROM user

ORDER BY id

LIMIT 10 OFFSET 10;

6. 总结

SQL分页查询是一种获取大量数据时非常实用的方式,我们可以根据具体的数据库类型选择适合自己的语法来实现分页。

数据库标签