在前两篇中,我们学会了 DQL 的基础查询、聚合函数、条件查询和分组查询,今天要学习的 排序查询 和 分页查询 是 DQL 的收尾技巧,也是业务开发中必备的 ------ 比如 "按成绩降序展示学生""分页显示班级列表",都离不开这两个知识点。所有案例仍基于 sicheng 数据库的 student 表。
目录
[1. 排序查询基本语法](#1. 排序查询基本语法)
[2. 排序方式说明](#2. 排序方式说明)
[3. 排序查询实战案例](#3. 排序查询实战案例)
[4. 排序查询的业务场景](#4. 排序查询的业务场景)
[1. 分页查询基本语法](#1. 分页查询基本语法)
[2. 关键参数说明](#2. 关键参数说明)
[3. 分页查询实战案例](#3. 分页查询实战案例)
[4. 分页查询注意事项](#4. 分页查询注意事项)
[五、预告:DQL 执行顺序与 DCL 权限控制](#五、预告:DQL 执行顺序与 DCL 权限控制)
一、排序查询:按指定规则排列结果
排序查询的核心是 order by 子句,位于 group by/having 之后,limit 之前,支持单字段排序和多字段排序。
1. 排序查询基本语法
sql
select 字段列表
from 表名
[where 条件]
[group by 分组字段]
order by 字段1 排序方式1, 字段2 排序方式2;
2. 排序方式说明
| 排序方式 | 关键字 | 说明 | 是否可省略 |
|---|---|---|---|
| 升序 | asc | 从小到大排列(如成绩从低到高) | 是(默认升序) |
| 降序 | desc | 从大到小排列(如成绩从高到低) | 否(必须显式指定) |
3. 排序查询实战案例
案例 1:单字段升序排序
需求:查询所有学生,按年龄升序排列(默认 asc,可省略)。
sql
select * from student order by age asc;
select * from student order by age ;
执行结果:年龄从 16→17→18 排列,16 岁的学生排在最前面。
案例 2:单字段降序排序
需求:查询高一 (1) 班的学生,按成绩降序排列。
sql
select * from student where class = '高一(1)班' order by score by desc;
案例 3:多字段排序(核心考点)
多字段排序规则:先按第一个字段排序,当第一个字段值相同时,再按第二个字段排序。
需求:查询所有学生,先按年龄升序排列,年龄相同则按成绩降序排列。
sql
select * from student order by age asc, score desc;
4. 排序查询的业务场景
排序是前端展示的高频需求,比如:
- 教务系统:按成绩降序展示班级排名;
- 电商平台:按销量降序 / 价格升序展示商品;
- 通讯录:按姓名首字母升序展示联系人。
二、分页查询:实现数据分页展示
分页查询是互联网项目的标配(比如一页显示 10 条学生记录),MySQL 中用 limit 关键字实现,语法简单但计算逻辑要记牢。
1. 分页查询基本语法
sql
select 字段列表
from 表名
[where 条件]
[order by 排序字段]
limit 起始索引, 查询记录数;
2. 关键参数说明
- 起始索引:从 0 开始计数(第一页起始索引为 0);
- 查询记录数:每页显示的记录条数;
- 起始索引计算公式 :
起始索引 = (查询页码 - 1) × 每页记录数(核心公式,必须记牢)。
3. 分页查询实战案例
假设需求:每页显示 3 条学生记录,查询第 1、2、3 页的数据。
案例 1:查询第一页(页码 1,每页 3 条)
sql
-- 完整写法(起始索引0)
select id, name, class from student limit 0, 3;
-- 简化写法(第一页可省略起始索引0)
select id, name, class from student limit 3;
执行结果:返回前 3 条记录(id=1、2、3)。
案例 2:查询第二页(页码 2,每页 3 条)
sql
-- 起始索引 = (2-1)×3 = 3
select id, name, class from student limit 3, 3;
执行结果:返回第 4、5、6 条记录(id=4、5、6)。
案例 3:查询第三页(页码 3,每页 3 条)
sql
sql
-- 起始索引 = (3-1)×3 = 6
select id, name, class from student limit 6, 3;
执行结果:返回第 7、8、9 条记录(id=7、8、9);如果总记录数不足(比如只有 10 条),则返回剩余记录(不会报错)。
4. 分页查询注意事项
limit必须放在 SQL 语句的最后(在order by之后);- 不同数据库分页语法不同:MySQL 用
limit,Oracle 用rownum,SQL Server 用top; - 大数据量分页时,起始索引过大会影响效率(比如
limit 10000, 10),需优化(如用主键分页)。
三、综合案例:多语法组合使用
需求:查询成绩大于 80 分的男生,按年龄升序排列,分页显示第 1 页(每页 2 条)。
sql
select name, age, score, gender
from student
where score > 80 and gender = '男' -- 条件过滤
order by age asc -- 排序
limit 2; -- 分页(第一页,每页2条)
执行结果:
- 张三(16 岁,85.5 分);
- 李四(17 岁,92.0 分)。
四、核心知识点总结
| 知识点 | 核心内容 | 易错点 |
|---|---|---|
| 排序查询 | order by 字段 排序方式;多字段排序先按第一个字段,同值再按第二个 |
降序必须写 desc,升序可省略 asc |
| 分页查询 | limit 起始索引, 记录数;起始索引 = (页码 - 1)× 每页条数 |
起始索引从 0 开始,第一页可省略起始索引 |
| 语法顺序 | where → order by → limit(limit 必须在最后) |
把 limit 放在 where 前会报错 |
| 综合使用 | 条件 + 排序 + 分页组合,是业务开发的典型写法 | 分页前必须先排序(否则分页结果无序) |
五、预告:DQL 执行顺序与 DCL 权限控制
本文我们掌握了排序和分页查询,接下来会讲解 DQL 语句的执行顺序 (面试高频考点,编写顺序≠执行顺序),以及 MySQL 的权限控制语言 DCL------ 这是管理数据库权限的核心,比如 "创建用户""授予查询权限"。关注我,下一篇收尾 DQL 并入门 DCL!
希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!
