【MySQL】查询数据,对结果进行排序(关键字:ORDER BY)

您所在的位置:网站首页 数据库查询升序 【MySQL】查询数据,对结果进行排序(关键字:ORDER BY)

【MySQL】查询数据,对结果进行排序(关键字:ORDER BY)

2024-07-14 00:19| 来源: 网络整理| 查看: 265

文章目录 单列排序多列排序指定排序方式,升序(ASC,ASCENDING) / 降序(DESC,DESCENDING)`ORDER BY` 关键字与 `LIMIT` 关键字联用

我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持

我们有个学生表,里面有10个学生数据。

SELECT idx_student_name FROM student;

查询结果:

+ ---------------- + | idx_student_name | + ---------------- + | 范晓明 | | 刘秀英 | | 黎璐 | | 苏云熙 | | 雷睿 | | 方睿 | | 严震南 | | 沈璐 | | 刘岚 | | 严宇宁 | + ---------------- +

通常我们直接查询出来的数据顺序是数据的插入顺序,所以并不一定是我们想要的顺序。

单列排序

我们要让数据按我们希望的方式,就需要使用到 ORDER BY 关键字。

# 格式。 SELECT 列名 FROM 表名 ORDER BY 要排序的列名;

我们查询 idx_student_name 字段 从 学生表,并且让结果按照 idx_student_name 字段进行排序。

SELECT idx_student_name FROM student ORDER BY idx_student_name;

使用 ORDER BY 关键字,查询结果:

+ ---------------- + | idx_student_name | + ---------------- + | 严宇宁 | | 严震南 | | 刘岚 | | 刘秀英 | | 方睿 | | 沈璐 | | 苏云熙 | | 范晓明 | | 雷睿 | | 黎璐 | + ---------------- + 多列排序

如果我们想让学生先按入学日期、再按班级排序,最后同一个班里的同学再按姓名排序,怎么处理?

SELECT uk_student_number, admission_date, class_number, idx_student_name FROM student ORDER BY admission_date, class_number, idx_student_name;

查询结果:

+ ----------------- + -------------- + ----------- + ---------------- + | uk_student_number | admission_date | class_number| idx_student_name | + ----------------- + -------------- + ----------- + ---------------- + | 89480 | 2023-09-01 | 1991 | 严宇宁 | | 21666 | 2023-09-01 | 1991 | 严震南 | | 39917 | 2023-09-01 | 2582 | 刘岚 | | 17117 | 2023-09-01 | 2582 | 刘秀英 | | 46573 | 2023-09-01 | 2582 | 黎璐 | | 52626 | 2023-09-01 | 5075 | 沈璐 | | 28909 | 2023-09-01 | 5436 | 方睿 | | 41955 | 2023-09-01 | 5436 | 范晓明 | | 48262 | 2023-09-01 | 5436 | 雷睿 | | 60631 | 2023-09-01 | 5441 | 苏云熙 | + ----------------- + -------------- + ----------- + ---------------- +

我们可以很清晰的看见:

学生号是乱序的,所以学生号没有影响排列。先筛选了同一天入学的数据。然后再按同一个班级的排序。最后同一个班级的再按名称排序。

小结: ORDER BY 后面接多个字段,字段的顺序就是排序的顺序。

ORDER BY 列1, 列2, 列3; 先按列1排序。同一列1里面,再按列2排序。同一列1,列2,里面,再按列3排序。 指定排序方式,升序(ASC,ASCENDING) / 降序(DESC,DESCENDING) 不指定列的排序方式,默认是升序ASC。降序排序需要在列名后标出DESC(升序不标默认也是升序,所以重点关注降序即可)。降序标一列DESC,此一列按降序排列;标两列DESC,此两列按降序排列;没有标的列,仍然默认按升序排列。

我们将 idx_student_name 字段单独加上DESC,现在的逻辑变成:

先依次按入学日期(admission_date)、班级(class_number )字段升序排列。最后同一个班级的数据,按名(idx_student_name)称倒序排列。 SELECT uk_student_number, admission_date, class_number, idx_student_name FROM student ORDER BY admission_date, class_number, idx_student_name DESC;

查询结果:

+ ----------------- + -------------- + ----------- + ---------------- + | uk_student_number | admission_date | class_number| idx_student_name | + ----------------- + -------------- + ----------- + ---------------- + | 21666 | 2023-09-01 | 1991 | 严震南 | | 89480 | 2023-09-01 | 1991 | 严宇宁 | | 46573 | 2023-09-01 | 2582 | 黎璐 | | 17117 | 2023-09-01 | 2582 | 刘秀英 | | 39917 | 2023-09-01 | 2582 | 刘岚 | | 52626 | 2023-09-01 | 5075 | 沈璐 | | 41955 | 2023-09-01 | 5436 | 范晓明 | | 48262 | 2023-09-01 | 5436 | 雷睿 | | 28909 | 2023-09-01 | 5436 | 方睿 | | 60631 | 2023-09-01 | 5441 | 苏云熙 | + ----------------- + -------------- + ----------- + ---------------- +

排序区分大小写问题:

这个主要看数据库和表的编码方式上有没有区分大小写。例如我这里使用的测试数据 utf8mb4_0900_ai_ci 的编码方式,就是不区分大小写的。_ci 表示不区分大小写(ci = case insensitive)。_cs 表示区分大小写(cs = case sensitive)。 ORDER BY 关键字与 LIMIT 关键字联用

我们使用 ORDER BY 与 LIMIT 联用,可以很方便的实现,班级按成绩排名。(假设只有一个班级,仅演示当前功能,不牵涉过多搜索关键字)

查询学号、姓名、成绩、从学生表搜索,根据成绩升序(默认升序,从小到大) 排列,倒数前五名。 默认升序从小到大,对应成绩就是从低到高,即:倒数前五名。 # 默认升序从小到到,对应成绩就是从低到高,即:倒数前五名。 SELECT uk_student_number, idx_student_name, score FROM student ORDER BY score LIMIT 5; 查询学号、姓名、成绩、从学生表搜索,根据成绩降序(从大到小) 排列,正数前五名。 降序从大到小,对应成绩就是从高到低,即:正数前五名。 # 降序从大到小,对应成绩就是从高到低,即:正数前五名。 SELECT uk_student_number, idx_student_name, score FROM student ORDER BY score DESC LIMIT 5;

注意: LIMIT 与 ORDER BY 联用。LIMIT 关键字必须位于 ORDER BY 关键字之后。否则会提示语法错误,执行失败。

在这里插入图片描述

我是一名立志把细节都说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3