6. 排序与分页
排序查询
1). 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
ASC : 升序(默认值)
DESC: 降序
注意事项:
- 如果是升序, 可以不指定排序方式ASC ;
- 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;
分页查询
语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意事项:
- 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
💡 分页口诀:LIMIT (页码-1)*每页条数, 每页条数。排序常和分页搭配,做"排行榜""第N页"必备。
📝 本节例题
以下例题均基于 教学实例 库(student / course / sc / teacher / grades / dept / emp),开始前先执行 USE 教学实例;。建议先自己写一遍,再展开答案对照。
例 1
按年龄从大到小显示所有学生的姓名和年龄。
查看参考答案(可复制)
sql
SELECT Sname, sage FROM student ORDER BY sage DESC;💡 默认 ASC 升序,DESC 降序;排序列含 NULL 时 NULL 排在最前。
例 2
先按班级升序,同班再按年龄降序排列学生。
查看参考答案(可复制)
sql
SELECT class 班级, Sname 姓名, sage 年龄
FROM student
ORDER BY class ASC, sage DESC;💡 多列排序按书写顺序依次生效,每列可各自指定升降序。
例 3
根据班级对学生进行升序排序 , 班级相同 , 再按照出生年月进行降序排序
查看参考答案(可复制)
sql
select * from student order by class asc ,sbirth desc;
例 4
查询第1页员工数据, 每页展示10条记录
查看参考答案(可复制)
sql
select * from student limit 0,10;
select * from student limit 10;
例 5
查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数
查看参考答案(可复制)
sql
select * from student limit 10,10;
例 6
查询1班学生中,年龄最大的前三名的记录
查看参考答案(可复制)
sql
SELECT * from student where class='01' ORDER BY sbirth LIMIT 3 ;
例 7
查询成绩排名第 6~10 名的记录(每页 5 条,取第 2 页)。
查看参考答案(可复制)
sql
SELECT * FROM sc
ORDER BY score DESC
LIMIT 5, 5;💡 LIMIT 偏移量, 条数,偏移量从 0 开始:第 n 页写作 LIMIT (n-1)*每页条数, 每页条数。
/* SQL的执行顺序 在讲解DQL语句的具体语法之前,我们已经讲解了DQL语句的完整语法,及编写顺序,接下来,我们要 来说明的是DQL语句在执行时的执行顺序,也就是先执行那一部分,后执行那一部分。 执行顺序: 1、FROM 表名列表 2、WHERE 条件列表 3、GROUP BY 分组字段列表 4、HAVING 分组后条件列表 5、SELECT 字段列表 6、ORDER BY 排序字段列表 7、LMIT 分页参数 */ 综上所述,我们可以看到DQL语句的执行顺序为: from ... where ... group by ... having ... select ... order by ... limit ... 可以理解为: 先从表里找,按条件找,分组找,分组后的条件找,找出数据,排序,分页。