SQL 排序分页精讲!ORDER BY+LIMIT 全套用法,报表分页
前言
学会了条件查询、模糊查询之后,日常业务还有两个刚需场景:
- 查出来的数据杂乱无章,想按年龄、时间、金额从小到大 / 从大到小排序;
- 数据有成千上万条,一次性加载全部卡死,需要分页展示,一页只展示 10 条、20 条;
- 搞不清升序、降序关键字,写排序经常反着;
- 面试高频考点:多字段排序、分页原理、LIMIT 偏移量坑点经常答不上;
- 做后台列表、APP 列表、报表分页,全部离不开
ORDER BY和LIMIT。
本篇用大白话 + 实战案例,手把手带你掌握单字段排序、多字段排序、升序降序、分页查询、偏移量分页,同时总结职场高频避坑点,学完直接能上手做业务列表分页。
知识点
一、ORDER BY 排序语法
ORDER BY:对查询结果,按指定字段进行升序 / 降序排列。 基础语法:
sql
SELECT 字段列表 FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC];- ASC:升序,从小到大,默认可以省略
- DESC:降序,从大到小,必须手动写
二、单字段排序
只根据一个字段进行排序,比如按年龄、注册时间、金额排序。
三、多字段排序
先按第一个字段排序,第一个字段值相同时,再按第二个字段排序。 适用场景:先按部门排序,同部门再按年龄排序。
四、LIMIT 分页语法
LIMIT:限制返回数据行数,实现分页效果,MySQL 专属高频用法。 两种格式:
- 只写一个参数:
LIMIT n只返回前 n 条数据 - 写两个参数:
LIMIT offset, rows
- offset:偏移量,从第几条开始(从 0 开始计数)
- rows:每页展示多少条
分页通用公式:
第 page 页,每页 size 条
LIMIT (page-1)*size , size
通俗类比 + 实例表格
通俗类比
ORDER BY:好比排队点名,可以按身高从矮到高、从高到矮站队;- 多字段排序:先按班级站队,同一个班里再按身高排序;
LIMIT:只挑前几个人出来,或者从第几个人开始往后挑几个人,实现一页一页看。
演示数据表:user 用户表
表格
| id | name | age | gender | salary |
|---|---|---|---|---|
| 1 | 张三 | 25 | 男 | 8000 |
| 2 | 李四 | 22 | 女 | 7200 |
| 3 | 王五 | 28 | 男 | 9500 |
| 4 | 赵六 | 25 | 女 | 8600 |
| 5 | 孙七 | 30 | 男 | 12000 |
SQL 代码演示
1. 单字段升序(ASC 默认省略)
sql
-- 按年龄升序:从小到大 SELECT * FROM user ORDER BY age ASC; -- ASC 可省略,默认就是升序 SELECT * FROM user ORDER BY age;2. 单字段降序 DESC
sql
-- 工资从高到低排序 SELECT * FROM user ORDER BY salary DESC;3. 多字段排序
sql
-- 先按年龄升序,年龄相同再按工资降序 SELECT * FROM user ORDER BY age ASC, salary DESC;4. LIMIT 限制返回条数
sql
-- 只取前3条数据 SELECT * FROM user LIMIT 3;5. 分页查询实战
每页 2 条:
- 第 1 页:
LIMIT 0,2 - 第 2 页:
LIMIT 2,2
sql
-- 第1页,每页2条 SELECT * FROM user LIMIT 0,2; -- 第2页,每页2条 SELECT * FROM user LIMIT 2,2;6. 条件 + 排序 + 分页 组合实战
sql
-- 查询男性用户,按工资降序,取前3条 SELECT * FROM user WHERE gender = '男' ORDER BY salary DESC LIMIT 3;易错 / 避坑点
❌ 忘记LIMIT 偏移量从 0 开始✅ 正解:第一条数据偏移量是 0,不是 1,分页公式一定要记牢。
❌ 多字段排序只写一个 DESC ✅ 正解:每个排序字段的升降序单独指定,不写默认 ASC。
❌ 把 ORDER BY 写在 WHERE 前面 ✅ 正解:固定顺序:
SELECT → FROM → WHERE → ORDER BY → LIMIT。❌ 大表深度分页用
LIMIT 100000,10✅ 正解:偏移量越大越慢,生产大表禁止高偏移量分页,要用主键优化分页。❌ 排序字段存在 NULL 值,排序结果错乱 ✅ 正解:排序时 NULL 默认排在最前面,业务要注意兼容处理。
小结
- ORDER BY实现排序,ASC 升序、DESC 降序,ASC 可省略;
- 支持单字段排序、多字段组合排序,满足复杂业务列表;
- LIMIT既能限制条数,又能通过
偏移量,条数实现分页; - 分页公式:
LIMIT (页码-1)*每页条数 , 每页条数; - 标准执行顺序:WHERE 筛选 → ORDER BY 排序 → LIMIT 分页;
- 日常后台列表、APP 分页、报表排行、面试考点,全靠这两个语法。
思考题
思考题 1
ORDER BY 默认是升序还是降序?关键字是什么?
答案: 默认升序 ASC;降序关键字是DESC。
思考题 2
写出 SQL:按工资从高到低排序,只取前 3 名员工。
答案:
sql
SELECT * FROM user ORDER BY salary DESC LIMIT 3;思考题 3
一共 5 条数据,每页显示 2 条,第 3 页怎么写 LIMIT?
答案: 页码 3,每页 2 条 偏移量 = (3-1)*2 = 4 语句:
sql
SELECT * FROM user LIMIT 4,2;