📄 一句话概括
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
- LIMIT 必须和 ORDER BY 搭配才有意义——不排队就限量,拿的是【任意】几行(顺序无保证),【前三名】变【随机三名】
- 语句词序:LIMIT 永远在最后
二、OFFSET:先跳过 M 条
-- 跳过前 2 名,再取 2 条 → 第 3、4 名
SELECT name, score FROM students ORDER BY score DESC LIMIT 2 OFFSET 2;
输出:张三 85、王五 78。
LIMIT 2 OFFSET 2读作【跳过 2 条、取 2 条】- 【翻第 3 页、每页 2 条】=
LIMIT 2 OFFSET 4——公式:OFFSET = (页码 − 1) × 每页条数
三、动手 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 行,不报错。就像翻书翻过头,安静给你一页白纸。分页组件【最后一页点下一页变空白】就是这么来的,前端要自己判断收口。
五、常见误区
- "LIMIT 不写 ORDER BY 也没事" —— 大错。【LIMIT 3】取的是没有保证顺序的三行;【前三名】必须 ORDER BY + LIMIT 连用。
- "OFFSET 是从 1 开始数" —— OFFSET 0 是第 1 页(一条都不跳);公式 OFFSET = (页码 − 1) × 每页条数 算的是跳过量。
- "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 行、不报错**——翻页翻过头是空白页。- ☐ 下一节(3-15 COUNT函数-获取记录的数量)
相关笔记
- ORDER BY-排列记录 —— 上一节:先排队,本节才限量
- 🗄️ 数据库基础 · 索引 —— 全课路线图