欢迎光临
我们一直在努力

数据库知识点十一:limit的使用方法

一、核心思想

一句话概括:LIMIT 用于从查询结果中截取指定范围的行,实现"取前 N 条"、"分页显示"、"取第 N 条"等功能。

本质:控制返回结果集的行数,减少数据传输量,提升查询效率。

二、语法分类

1. 单参数用法

LIMIT count

写法含义
LIMIT 5 返回前 5 条
LIMIT 10 返回前 10 条

2. 双参数用法(两种写法等价)

— 写法1:逗号分隔(老式)
LIMIT offset, count

— 写法2:OFFSET 关键字(新式,更清晰)
LIMIT count OFFSET offset

写法含义等价写法
LIMIT 0, 5 跳过 0 条,取 5 条 LIMIT 5 OFFSET 0
LIMIT 5, 10 跳过 5 条,取 10 条 LIMIT 10 OFFSET 5
LIMIT 10, 5 跳过 10 条,取 5 条 LIMIT 5 OFFSET 10

3. 两种用法的本质

双参数 LIMIT offset, count 是唯一真正的语法。单参数 LIMIT count 只是双参数 LIMIT 0, count 的简写。

LIMIT 5 — 等价于
LIMIT 0, 5 — 等价于
LIMIT 5 OFFSET 0

三、执行流程

1. SQL 执行顺序

FROM → 确定数据来源
WHERE → 筛选行(分组前)
GROUP BY → 分组
HAVING → 筛选组(分组后)
SELECT → 选择列
ORDER BY → 排序 ← LIMIT 在这之后执行!
LIMIT → 截取行 ← 最后执行

2. LIMIT 的执行时机

完整结果集(所有满足条件的行)

ORDER BY 排序

跳过 offset 条(跳过)

取 count 条(取出)

返回最终结果

重要:LIMIT 是在 ORDER BY 之后执行的,所以必须先用 ORDER BY 确定顺序,再用 LIMIT 截取。

四、使用方法

1. 取前 N 条

— 取前 5 个用户
SELECT * FROM users LIMIT 5;

— 取 token 最多的前 3 个用户
SELECT user_id, SUM(tokens) AS total
FROM prompts
GROUP BY user_id
ORDER BY total DESC
LIMIT 3;

2. 分页查询

— 每页 10 条
— 第 1 页:LIMIT 0, 10
— 第 2 页:LIMIT 10, 10
— 第 3 页:LIMIT 20, 10
— 第 N 页:LIMIT (N-1)*M, M

公式:

LIMIT (页码 – 1) * 每页条数, 每页条数

3. 取第 N 条

— 取第 3 条:LIMIT 2, 1
— 取第 5 条:LIMIT 4, 1
— 取第 N 条:LIMIT N-1, 1

公式:

LIMIT N-1, 条数

4. 取倒数 N 条

— 取最后 3 个用户
SELECT * FROM users ORDER BY user_id DESC LIMIT 3;

— 取倒数第 3 到第 1 条
SELECT * FROM users ORDER BY user_id DESC LIMIT 3;

5. 取第 N 到第 M 条

— 取第 3 到第 7 条(共 5 条)
SELECT * FROM users ORDER BY user_id LIMIT 2, 5;

公式:

— 取第 start 条到第 end 条
LIMIT start-1, end-start+1

五、使用场景

场景示例SQL
排行榜 取积分前 10 名 ORDER BY score DESC LIMIT 10
分页列表 用户列表第 2 页 LIMIT 10, 10
取第 N 名 第 3 名用户 LIMIT 2, 1
随机抽样 随机取 5 条 ORDER BY RAND() LIMIT 5
最新数据 最新的 10 条订单 ORDER BY created_at DESC LIMIT 10
数据导出 分批导出 1000 条 LIMIT offset, 1000
删除/更新前 N 条 删除前 5 条日志 DELETE FROM logs LIMIT 5

六、核心速查表

需求SQL
前 10 条 LIMIT 10
第 1 页(每页 10 条) LIMIT 0, 10
第 3 页(每页 10 条) LIMIT 20, 10
第 N 页(每页 M 条) LIMIT (N-1)*M, M
第 1 条 LIMIT 0, 1
第 3 条 LIMIT 2, 1
第 N 条 LIMIT N-1, 1
第 3 到第 7 条 LIMIT 2, 5
最后 3 条 ORDER BY id DESC LIMIT 3
随机 5 条 ORDER BY RAND() LIMIT 5
跳过 5 条取 10 条 LIMIT 5, 10 或 LIMIT 10 OFFSET 5

七、注意事项(重要!)

1. LIMIT 必须在 ORDER BY 之后

— 正确
SELECT * FROM users ORDER BY user_id LIMIT 10;

— 错误
SELECT * FROM users LIMIT 10 ORDER BY user_id;

2. 大数据量分页性能问题

— ❌ 性能差:偏移量越大,越慢
SELECT * FROM users LIMIT 100000, 10;

— ✅ 优化:使用主键条件
SELECT * FROM users
WHERE user_id > 100000
ORDER BY user_id
LIMIT 10;

3. ORDER BY 必须有唯一列保证排序稳定

— ⚠️ 可能不稳定(user_id 可能重复)
SELECT * FROM orders ORDER BY user_id LIMIT 10;

— ✅ 稳定:加入唯一列
SELECT * FROM orders ORDER BY user_id, order_id LIMIT 10;

4. 子查询中的 LIMIT 限制

某些版本不支持在子查询的 IN 中使用 LIMIT:

— 可能报错
SELECT * FROM users
WHERE user_id IN (SELECT user_id FROM prompts LIMIT 5);

— 使用 JOIN 替代
SELECT u.*
FROM users u
JOIN (SELECT DISTINCT user_id FROM prompts LIMIT 5) p
ON u.user_id = p.user_id;

5. OFFSET 从 0 开始

LIMIT 0, 1 — 第 1 条(偏移量 0)
LIMIT 1, 1 — 第 2 条(偏移量 1)
LIMIT 2, 1 — 第 3 条(偏移量 2)

八、记忆口诀

LIMIT a, b
a = 跳几个(偏移量从 0 开始)
b = 拿几个(返回行数)

返回:第 a+1 条 到 第 a+b 条

分页公式:LIMIT (页数-1)*每页条数, 每页条数
取第 N 条:LIMIT N-1, 1

九、一句话总结

LIMIT 是在 ORDER BY 排序之后,从结果集中跳过 offset 行,再取 count 行,用于实现分页、排行榜、取第 N 条等所有"需要截取结果集"的场景。核心是控制返回的行数。

赞(0)
未经允许不得转载:171主机测评 » 数据库知识点十一:limit的使用方法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址