MySQL 系统学习 第二阶段 第三章 DQL(Data Query Language)第三节:ORDER BY + LIMIT(排序 + 分页)

一、为什么必须学 ORDER BY + LIMIT?

你在真实业务中一定见过这些场景:

  • 用户列表(按时间排序)
  • 商品列表(按价格排序)
  • 订单列表(最新订单在最上面)
  • 分页(第1页、第2页、第3页)

这些全部依赖:

复制代码
复制代码
ORDER BY + LIMIT

二、ORDER BY(排序)

1. 基本语法

复制代码
复制代码
SELECT *
FROM student
ORDER BY 字段 排序方式;

2. 升序(ASC)

复制代码
复制代码
SELECT *
FROM student
ORDER BY age ASC;

👉 ASC = ascending(升序)

结果:

复制代码
复制代码
19 → 20 → 21 → 22

3. 降序(DESC)

复制代码
复制代码
SELECT *
FROM student
ORDER BY age DESC;

👉 DESC = descending(降序)

结果:

复制代码
复制代码
22 → 21 → 20 → 19

4. 默认排序规则

如果你不写:

复制代码
复制代码
ORDER BY age

默认是:

复制代码
复制代码
ASC(升序)

三、按多个字段排序(企业高频)

场景:

先按年龄排序,年龄相同再按成绩排序

复制代码
复制代码
SELECT *
FROM student
ORDER BY age ASC, score DESC;

解释:

复制代码
复制代码
第一优先级:age(小 → 大)

如果 age 相同:
第二优先级:score(大 → 小)

示例逻辑:

name age score
Tom 20 88.5
Mike 20 78.5

排序后:

复制代码
复制代码
Tom(20, 88.5)
Mike(20, 78.5)

四、ORDER BY 本质(很重要)

数据库执行逻辑:

复制代码
复制代码
FROM → WHERE → ORDER BY → SELECT

👉 排序发生在过滤之后


五、LIMIT(分页核心)

1. 基础语法

复制代码
复制代码
SELECT *
FROM student
LIMIT 数量;

2. 示例

取前3条数据:

复制代码
复制代码
SELECT *
FROM student
LIMIT 3;

六、LIMIT + ORDER BY(最常用组合)

场景:取"最高分前三名"

复制代码
复制代码
SELECT *
FROM student
ORDER BY score DESC
LIMIT 3;

结果:

复制代码
复制代码
Lucy 95.5
Jack 91
Tom 88.5

七、分页(重点中的重点)

1. 基本公式

复制代码
复制代码
LIMIT 起始位置, 数量

2. 示例

第1页(每页2条)

复制代码
复制代码
SELECT *
FROM student
LIMIT 0, 2;

第2页

复制代码
复制代码
SELECT *
FROM student
LIMIT 2, 2;

第3页

复制代码
复制代码
SELECT *
FROM student
LIMIT 4, 2;

3. 分页公式(必须记住)

复制代码
复制代码
offset = (page - 1) * pageSize

4. 举例(非常重要)

每页2条:

页码 SQL
1 LIMIT 0,2
2 LIMIT 2,2
3 LIMIT 4,2

八、ORDER BY + LIMIT 实战

1. 查询成绩最高的1个人

复制代码
复制代码
SELECT *
FROM student
ORDER BY score DESC
LIMIT 1;

2. 查询年龄最小的2个人

复制代码
复制代码
SELECT *
FROM student
ORDER BY age ASC
LIMIT 2;

九、企业开发真实用法(非常重要)

1. 用户列表

复制代码
复制代码
SELECT id, name, age
FROM user
ORDER BY create_time DESC
LIMIT 20;

👉 最新用户在前


2. 商品列表

复制代码
复制代码
SELECT id, name, price
FROM product
ORDER BY price DESC
LIMIT 10;

👉 最贵商品


3. 分页接口(后端常见)

复制代码
复制代码
SELECT *
FROM user
ORDER BY id DESC
LIMIT 20 OFFSET 40;

👉 第3页数据


十、LIMIT 为什么很重要?

因为:

如果没有 LIMIT:

复制代码
复制代码
SELECT *
FROM user;

可能返回:

复制代码
复制代码
100万条数据

👉 直接拖垮接口


十一、ORDER BY + LIMIT 性能问题(面试加分)

❗ 深分页问题

复制代码
复制代码
LIMIT 100000, 20

问题:

数据库要先扫描 100000 条再丢掉

👉 很慢


优化思路(了解即可)

复制代码
复制代码
WHERE id > last_id
LIMIT 20

👉 用"游标分页"替代 offset 分页


十二、本节总结

功能 SQL
升序 ORDER BY col ASC
降序 ORDER BY col DESC
多字段排序 ORDER BY a, b DESC
取前N条 LIMIT N
分页 LIMIT offset, size
分页公式 (page-1)*size

相关推荐
data analyse 4561 分钟前
服务端统计时区切换的日期归并
大数据·前端·数据库·人工智能·数据分析
要开心吖ZSH13 分钟前
《通过SeaTunnel 把 MySQL 的数据搬进 Doris》番外篇:容量、切分与速度——Doris 能扛多少,比 MySQL 快多少
mysql·性能优化·doris·分区·分表·分桶
乌暮18 分钟前
从 `println` 到生产级日志:Spring Boot 日志体系完全指南
java·开发语言·jvm·spring boot·后端·学习·面试
远方160921 分钟前
108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
大数据·linux·数据库·oracle
福娃筱欢1 小时前
SQLServer迁移至KES SQLServer模式 问题整理
数据库·oracle·sqlserver
hflmwl81 小时前
RedisDesktopManager安装包中文版官方下载,redis可视化客户端工具下载
数据库·redis·缓存·可视化客户端工具
xian_wwq1 小时前
【学习笔记】Milvus 是什么?为什么 RAG 系统经常使用它?-14
笔记·学习·milvus
FluxDB1 小时前
《用 Rust + GPUI 做了一个开源数据库客户端:FluxDB》
数据库
roman_日积跬步-终至千里1 小时前
【数据Agent论文·查询与语义|09】Spider 2.0:从生成SQL走向完成企业工作流
数据库·sql·数据分析
曦夜日长1 小时前
MySQL系统篇,数据库基础(二):数据库概念、SQL 分类与存储引擎
数据库·sql·mysql