🗄️ 第三章 操作数据库-SQL的使用方法
📄 一句话概括

LIMIT 只要前 N 条,OFFSET 先跳过 M 条——【排行榜前三】和【翻页】全靠这一对。

📝 本节和前面几节的关系

3-13 会排队了;本节学会【只取队里一段】。LIMIT+OFFSET+ORDER BY 三件套一合体,你手机里所有 App 的【翻页】就是它们在转。

一、LIMIT:只要前 N 条

-- 准备块(没建表先跑 3-6 的准备块)

-- 分数最高的前 2 名(先排队、再限量)
SELECT name, score FROM students ORDER BY score DESC LIMIT 2;

输出:

name  score
李四  92
张三  85

二、OFFSET:先跳过 M 条

-- 跳过前 2 名,再取 2 条 → 第 3、4 名
SELECT name, score FROM students ORDER BY score DESC LIMIT 2 OFFSET 2;

输出:张三 85、王五 78。

三、动手 Demo:手工翻页

-- 每页 2 条,翻 3 页
SELECT name, score FROM students ORDER BY score DESC LIMIT 2 OFFSET 0;   -- 第 1 页
SELECT name, score FROM students ORDER BY score DESC LIMIT 2 OFFSET 2;   -- 第 2 页
SELECT name, score FROM students ORDER BY score DESC LIMIT 2 OFFSET 4;   -- 第 3 页

第 3 页输出:

name  score
赵六  64
钱七  <空>

看到什么算成功:三页拼起来正好是全班按分数的完整榜;第 3 页最后一位是钱七(NULL 当最小、垫底——3-13 的口径延续)。

四、30 秒实验

OFFSET 越过末尾试试:LIMIT 2 OFFSET 10;——0 行,不报错。就像翻书翻过头,安静给你一页白纸。分页组件【最后一页点下一页变空白】就是这么来的,前端要自己判断收口。

五、常见误区

  1. "LIMIT 不写 ORDER BY 也没事" —— 大错。【LIMIT 3】取的是没有保证顺序的三行;【前三名】必须 ORDER BY + LIMIT 连用。
  2. "OFFSET 是从 1 开始数" —— OFFSET 0 是第 1 页(一条都不跳);公式 OFFSET = (页码 − 1) × 每页条数 算的是跳过量。
  3. "LIMIT 是 SQL 标准命令" —— 它是 MySQL/SQLite 阵营的写法;SQL Server 用 TOP、Oracle 用别的法子。本课的 SQLite/MySQL 环境都能用 LIMIT。
自测三问(点开对答案) 1. 【取第 2 页、每页 10 条】怎么写? **`LIMIT 10 OFFSET 10`**——跳过 (2−1)×10 条、取 10 条。 2. LIMIT 为什么必须配 ORDER BY? **不排队顺序无保证,【前 N 条】就没有意义**。 3. OFFSET 越过末尾会怎样? **返回 0 行、不报错**——翻页翻过头是空白页。

相关笔记