🙏 感谢您的支持! 我们在七月份已经筹集了 $65 — 这足够我们工作到下个月。请帮助我们保持进度,进一步支持这个项目。 支持这个项目 →
SQL 代码已复制到剪贴板

课程 2.6: 使用 LIMIT 和 OFFSET 限制结果

在处理大型表时,您通常不想检索每一行。有时您只需要前几条记录,或者您想实现“分页”(在第 1 页、第 2 页等上显示结果)。为此,我们使用 LIMITOFFSET 子句。

LIMIT 子句

LIMIT 子句用于指定查询应返回的最大行数。

语法

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT count;
  • count: 要返回的最大行数。

注意: 强烈建议将 LIMITORDER BY 一起使用。如果没有排序,“前 X 行”可能是任何行,这取决于数据库引擎如何优化查询。

OFFSET 子句

OFFSET 子句告诉数据库在开始返回结果之前跳过特定数量的行。

语法

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT count OFFSET skip;
  • skip: 在开始返回行之前要跳过的行数。

分页:结合使用 LIMIT 和 OFFSET

分页是将大型结果集划分为离散页面的过程。这是结合使用 LIMITOFFSET 的最常见用例。

  • 第 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 在返回数据之前跳过指定数量的行。
  • 结合使用 LIMITOFFSET 是实现分页的标准方法。
  • 始终与这些子句一起使用 ORDER BY 以确保结果可预测。只有在按唯一值(或定义唯一顺序的列组合)排序时,才能保证真正可预测的结果。

在下一课中,我们将看到如何 结合使用 WHERE、ORDER BY 和 LIMIT 来构建强大而精确的查询。

尝试解决以下任务,以巩固您在本课中学到的内容。

  1. 按标题排序的前10部电影
  2. 最长的五部电影
  3. 电影列表 - 第三页
  4. 最长的电影