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

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

码农世界 2024-06-21 后端 104 次浏览 0个评论

文章目录

  • 单列排序
  • 多列排序
  • 指定排序方式,升序(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 关键字之后。否则会提示语法错误,执行失败。

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


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

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

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

转载请注明来自码农世界,本文标题:《【MySQL】查询数据,对结果进行排序(关键字:ORDER BY)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,104人围观)参与讨论

还没有评论,来说两句吧...

Top