课程 2.6: 使用 LIMIT 和 OFFSET 限制结果
在处理大型表时,您通常不想检索每一行。有时您只需要前几条记录,或者您想实现“分页”(在第 1 页、第 2 页等上显示结果)。为此,我们使用 LIMIT 和 OFFSET 子句。
LIMIT 子句
LIMIT 子句用于指定查询应返回的最大行数。
语法
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT count;
count: 要返回的最大行数。
注意: 强烈建议将
LIMIT与ORDER BY一起使用。如果没有排序,“前 X 行”可能是任何行,这取决于数据库引擎如何优化查询。
OFFSET 子句
OFFSET 子句告诉数据库在开始返回结果之前跳过特定数量的行。
语法
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT count OFFSET skip;
skip: 在开始返回行之前要跳过的行数。
分页:结合使用 LIMIT 和 OFFSET
分页是将大型结果集划分为离散页面的过程。这是结合使用 LIMIT 和 OFFSET 的最常见用例。
- 第 1 页:
LIMIT 10 OFFSET 0(行 1-10) - 第 2 页:
LIMIT 10 OFFSET 10(行 11-20) - 第 3 页:
LIMIT 10 OFFSET 20(行 21-30)
示例
示例 1:最长的 5 部电影
此查询查找 film 表中最长的 5 部电影。
SELECT title, length
FROM film
ORDER BY length DESC
LIMIT 5;
示例 2:跳过记录
此查询跳过前 10 个演员(按 ID 排序),并返回接下来的 5 个。
SELECT actor_id, first_name, last_name
FROM actor
ORDER BY actor_id
LIMIT 5 OFFSET 10;
本课的关键要点:
LIMIT限制结果集中的行数。OFFSET在返回数据之前跳过指定数量的行。- 结合使用
LIMIT和OFFSET是实现分页的标准方法。 - 始终与这些子句一起使用
ORDER BY以确保结果可预测。只有在按唯一值(或定义唯一顺序的列组合)排序时,才能保证真正可预测的结果。
在下一课中,我们将看到如何 结合使用 WHERE、ORDER BY 和 LIMIT 来构建强大而精确的查询。