0


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

文章目录

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

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

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


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

SELECT idx_student_name FROM student;

查询结果:

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

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


单列排序

我们要让数据按我们希望的方式,就需要使用到

ORDER BY

关键字。

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

我们查询

idx_student_name

字段 从 学生表,并且让结果按照

idx_student_name

字段进行排序。

SELECT idx_student_name FROM student ORDERBY idx_student_name;

使用

ORDER BY

关键字,查询结果:

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

多列排序

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

SELECT
    uk_student_number, admission_date, class_number, idx_student_name
FROM
    student
ORDERBY
    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

后面接多个字段,字段的顺序就是排序的顺序。

ORDERBY 列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
ORDERBY
    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 studentORDERBY score LIMIT5;
  • 查询学号、姓名、成绩、从学生表搜索,根据成绩降序(从大到小) 排列,正数前五名。 - 降序从大到小,对应成绩就是从高到低,即:正数前五名。# 降序从大到小,对应成绩就是从高到低,即:正数前五名。SELECT uk_student_number, idx_student_name, score FROM studentORDERBY score DESCLIMIT5;

注意:

LIMIT

ORDER BY

联用。

LIMIT

关键字必须位于

ORDER BY

关键字之后。否则会提示语法错误,执行失败。

在这里插入图片描述


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

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

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

标签: mysql 数据库

本文转载自: https://blog.csdn.net/m0_50513629/article/details/138179275
版权归原作者 我梦Leo 所有, 如有侵权,请联系我们删除。

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

还没有评论