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 专属高频用法。 两种格式:

  1. 只写一个参数:LIMIT n 只返回前 n 条数据
  2. 写两个参数: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;

易错 / 避坑点

  1. ❌ 忘记 LIMIT 偏移量从 0 开始 ✅ 正解:第一条数据偏移量是 0,不是 1,分页公式一定要记牢。

  2. ❌ 多字段排序只写一个 DESC ✅ 正解:每个排序字段的升降序单独指定,不写默认 ASC。

  3. ❌ 把 ORDER BY 写在 WHERE 前面 ✅ 正解:固定顺序:SELECT → FROM → WHERE → ORDER BY → LIMIT。

  4. ❌ 大表深度分页用 LIMIT 100000,10 ✅ 正解:偏移量越大越慢,生产大表禁止高偏移量分页,要用主键优化分页。

  5. ❌ 排序字段存在 NULL 值,排序结果错乱 ✅ 正解:排序时 NULL 默认排在最前面,业务要注意兼容处理。

小结

  1. ORDER BY 实现排序,ASC 升序、DESC 降序,ASC 可省略;
  2. 支持单字段排序、多字段组合排序,满足复杂业务列表;
  3. LIMIT 既能限制条数,又能通过 偏移量,条数 实现分页;
  4. 分页公式:LIMIT (页码-1)*每页条数 , 每页条数;
  5. 标准执行顺序:WHERE 筛选 → ORDER BY 排序 → LIMIT 分页;
  6. 日常后台列表、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;
相关推荐
SelectDB技术团队1 分钟前
Apache Doris 基于 Lance 的向量检索深度解析
数据库·数据仓库·数据分析·湖仓一体·apache doris·lakehouse·多模湖仓
这个DBA有点耶17 分钟前
从INDEX到JOIN_ORDER:MySQL 8.0 Hint语法体系与五类实战场景
数据库·mysql·架构
数字新视界21 分钟前
机房动环监控助力智能管理
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
梅菲塔亚25 分钟前
博客_Redis入门到实战
数据库·redis·缓存
abcyuu29 分钟前
用友 U8 Cloud 生产制造模块深度解析:从 BOM 建立到成本核算的技术实现
前端·数据库·制造
夜雪一千31 分钟前
MySQL 的ID用什么数据类型更好?主键ID选型实战
数据库·mysql
蓝胖的四次元口袋38 分钟前
Redis 知识梳理(3)
数据库·redis·缓存
一铭111991 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
Lynne3091 小时前
TSN 在变电站自动化通信网络升级中的应用价值与技术挑战
服务器·网络·数据库
弈栈录1 小时前
用户、会话与消息表应该如何设计
数据库·后端