• 数据库系统原理与应用教程(042)—— MySQL 查询(五):对查询结果排序


    数据库系统原理与应用教程(043)—— MySQL 查询(五):对查询结果排序

    在查询中使用 ORDER BY 子句可以对查询结果进行排序。默认按照升序对记录进行排序,如果希望按照降序对记录进行排序,可以使用 DESC 关键字。

    语法格式如下:

    -- 其中【列名或表达式】可以使用序号来代替
    ORDER BY
    列名或表达式 [DESC] [,...]
    
    • 1
    • 2
    • 3

    一、使用列名排序

    例如:

    (1)查询学生表的信息,按照 birth 升序排列。

    mysql> select * from student order by birth;
    +-------+-----------+---------------------+-------------+-----------+
    | s_id  | s_name    | birth               | phone       | addr      |
    +-------+-----------+---------------------+-------------+-----------+
    | S2013 | 曹梦德    | 1998-02-13 00:00:00 | 13853735522 | 郑州市    |
    | S2014 | 刘艳      | 1998-06-24 00:00:00 | 13623735335 | 郑州市    |
    | S2026 | 张学有    | 1998-07-06 00:00:00 | 13743735566 | 郑州市    |
    | S2022 | 周华建    | 1999-05-25 00:00:00 | 13243735578 | 郑州市    |
    | S2023 | 特朗普    | 1999-06-21 00:00:00 | 13343735588 | 新乡市    |
    | S2015 | 刘岩      | 1999-07-06 00:00:00 | 13813735225 | 信阳市    |
    | S2012 | 刘小青    | 1999-10-11 00:00:00 | 13603732255 | 新乡市    |
    | S2031 | 李明博    | 1999-10-26 00:00:00 | 13643732222 | 郑州市    |
    | S2011 | 张晓刚    | 1999-12-03 00:00:00 | 13163735775 | 信阳市    |
    | S2032 | 达芬奇    | 1999-12-31 00:00:00 | 13043731234 | 郑州市    |
    | S2021 | 董雯花    | 2000-07-30 00:00:00 | 13533735564 | 开封市    |
    | S2025 | 周健华    | 2000-08-22 00:00:00 | 13788736655 | 开封市    |
    | S2016 | 刘若非    | 2000-08-31 00:00:00 | 13683735533 | 开封市    |
    | S2024 | 奥巴马    | 2000-10-17 00:00:00 | 13843735885 | 信阳市    |
    +-------+-----------+---------------------+-------------+-----------+
    14 rows in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (2)查询学生表的信息,按照 phone 降序排列。

    mysql> select * from student order by phone desc;
    +-------+-----------+---------------------+-------------+-----------+
    | s_id  | s_name    | birth               | phone       | addr      |
    +-------+-----------+---------------------+-------------+-----------+
    | S2013 | 曹梦德    | 1998-02-13 00:00:00 | 13853735522 | 郑州市    |
    | S2024 | 奥巴马    | 2000-10-17 00:00:00 | 13843735885 | 信阳市    |
    | S2015 | 刘岩      | 1999-07-06 00:00:00 | 13813735225 | 信阳市    |
    | S2025 | 周健华    | 2000-08-22 00:00:00 | 13788736655 | 开封市    |
    | S2026 | 张学有    | 1998-07-06 00:00:00 | 13743735566 | 郑州市    |
    | S2016 | 刘若非    | 2000-08-31 00:00:00 | 13683735533 | 开封市    |
    | S2031 | 李明博    | 1999-10-26 00:00:00 | 13643732222 | 郑州市    |
    | S2014 | 刘艳      | 1998-06-24 00:00:00 | 13623735335 | 郑州市    |
    | S2012 | 刘小青    | 1999-10-11 00:00:00 | 13603732255 | 新乡市    |
    | S2021 | 董雯花    | 2000-07-30 00:00:00 | 13533735564 | 开封市    |
    | S2023 | 特朗普    | 1999-06-21 00:00:00 | 13343735588 | 新乡市    |
    | S2022 | 周华建    | 1999-05-25 00:00:00 | 13243735578 | 郑州市    |
    | S2011 | 张晓刚    | 1999-12-03 00:00:00 | 13163735775 | 信阳市    |
    | S2032 | 达芬奇    | 1999-12-31 00:00:00 | 13043731234 | 郑州市    |
    +-------+-----------+---------------------+-------------+-----------+
    14 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (3)查询学生表的信息,同时按照 addr 升序、phone 降序排列。

    mysql> select * from student order by addr, phone desc;
    +-------+-----------+---------------------+-------------+-----------+
    | s_id  | s_name    | birth               | phone       | addr      |
    +-------+-----------+---------------------+-------------+-----------+
    | S2024 | 奥巴马    | 2000-10-17 00:00:00 | 13843735885 | 信阳市    |
    | S2015 | 刘岩      | 1999-07-06 00:00:00 | 13813735225 | 信阳市    |
    | S2011 | 张晓刚    | 1999-12-03 00:00:00 | 13163735775 | 信阳市    |
    | S2025 | 周健华    | 2000-08-22 00:00:00 | 13788736655 | 开封市    |
    | S2016 | 刘若非    | 2000-08-31 00:00:00 | 13683735533 | 开封市    |
    | S2021 | 董雯花    | 2000-07-30 00:00:00 | 13533735564 | 开封市    |
    | S2012 | 刘小青    | 1999-10-11 00:00:00 | 13603732255 | 新乡市    |
    | S2023 | 特朗普    | 1999-06-21 00:00:00 | 13343735588 | 新乡市    |
    | S2013 | 曹梦德    | 1998-02-13 00:00:00 | 13853735522 | 郑州市    |
    | S2026 | 张学有    | 1998-07-06 00:00:00 | 13743735566 | 郑州市    |
    | S2031 | 李明博    | 1999-10-26 00:00:00 | 13643732222 | 郑州市    |
    | S2014 | 刘艳      | 1998-06-24 00:00:00 | 13623735335 | 郑州市    |
    | S2022 | 周华建    | 1999-05-25 00:00:00 | 13243735578 | 郑州市    |
    | S2032 | 达芬奇    | 1999-12-31 00:00:00 | 13043731234 | 郑州市    |
    +-------+-----------+---------------------+-------------+-----------+
    14 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (4)查询学生表的信息,同时按照 addr 降序和 phone 降序排列。

    mysql> select * from student order by addr desc, phone desc;
    +-------+-----------+---------------------+-------------+-----------+
    | s_id  | s_name    | birth               | phone       | addr      |
    +-------+-----------+---------------------+-------------+-----------+
    | S2013 | 曹梦德    | 1998-02-13 00:00:00 | 13853735522 | 郑州市    |
    | S2026 | 张学有    | 1998-07-06 00:00:00 | 13743735566 | 郑州市    |
    | S2031 | 李明博    | 1999-10-26 00:00:00 | 13643732222 | 郑州市    |
    | S2014 | 刘艳      | 1998-06-24 00:00:00 | 13623735335 | 郑州市    |
    | S2022 | 周华建    | 1999-05-25 00:00:00 | 13243735578 | 郑州市    |
    | S2032 | 达芬奇    | 1999-12-31 00:00:00 | 13043731234 | 郑州市    |
    | S2012 | 刘小青    | 1999-10-11 00:00:00 | 13603732255 | 新乡市    |
    | S2023 | 特朗普    | 1999-06-21 00:00:00 | 13343735588 | 新乡市    |
    | S2025 | 周健华    | 2000-08-22 00:00:00 | 13788736655 | 开封市    |
    | S2016 | 刘若非    | 2000-08-31 00:00:00 | 13683735533 | 开封市    |
    | S2021 | 董雯花    | 2000-07-30 00:00:00 | 13533735564 | 开封市    |
    | S2024 | 奥巴马    | 2000-10-17 00:00:00 | 13843735885 | 信阳市    |
    | S2015 | 刘岩      | 1999-07-06 00:00:00 | 13813735225 | 信阳市    |
    | S2011 | 张晓刚    | 1999-12-03 00:00:00 | 13163735775 | 信阳市    |
    +-------+-----------+---------------------+-------------+-----------+
    14 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    二、使用表达式排序

    例如:

    (1)查询学生表的信息,按照 age(由 birth 通过计算得到) 升序排列。

    mysql> select * from student order by year(now())-year(birth);
    +-------+-----------+---------------------+-------------+-----------+
    | s_id  | s_name    | birth               | phone       | addr      |
    +-------+-----------+---------------------+-------------+-----------+
    | S2016 | 刘若非    | 2000-08-31 00:00:00 | 13683735533 | 开封市    |
    | S2021 | 董雯花    | 2000-07-30 00:00:00 | 13533735564 | 开封市    |
    | S2024 | 奥巴马    | 2000-10-17 00:00:00 | 13843735885 | 信阳市    |
    | S2025 | 周健华    | 2000-08-22 00:00:00 | 13788736655 | 开封市    |
    | S2011 | 张晓刚    | 1999-12-03 00:00:00 | 13163735775 | 信阳市    |
    | S2012 | 刘小青    | 1999-10-11 00:00:00 | 13603732255 | 新乡市    |
    | S2015 | 刘岩      | 1999-07-06 00:00:00 | 13813735225 | 信阳市    |
    | S2022 | 周华建    | 1999-05-25 00:00:00 | 13243735578 | 郑州市    |
    | S2023 | 特朗普    | 1999-06-21 00:00:00 | 13343735588 | 新乡市    |
    | S2031 | 李明博    | 1999-10-26 00:00:00 | 13643732222 | 郑州市    |
    | S2032 | 达芬奇    | 1999-12-31 00:00:00 | 13043731234 | 郑州市    |
    | S2013 | 曹梦德    | 1998-02-13 00:00:00 | 13853735522 | 郑州市    |
    | S2014 | 刘艳      | 1998-06-24 00:00:00 | 13623735335 | 郑州市    |
    | S2026 | 张学有    | 1998-07-06 00:00:00 | 13743735566 | 郑州市    |
    +-------+-----------+---------------------+-------------+-----------+
    14 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (2)查询学生表的信息,按照 phone 的后 4 位降序排列。

    mysql> select * from student order by right(phone,4) desc;
    +-------+-----------+---------------------+-------------+-----------+
    | s_id  | s_name    | birth               | phone       | addr      |
    +-------+-----------+---------------------+-------------+-----------+
    | S2025 | 周健华    | 2000-08-22 00:00:00 | 13788736655 | 开封市    |
    | S2024 | 奥巴马    | 2000-10-17 00:00:00 | 13843735885 | 信阳市    |
    | S2011 | 张晓刚    | 1999-12-03 00:00:00 | 13163735775 | 信阳市    |
    | S2023 | 特朗普    | 1999-06-21 00:00:00 | 13343735588 | 新乡市    |
    | S2022 | 周华建    | 1999-05-25 00:00:00 | 13243735578 | 郑州市    |
    | S2026 | 张学有    | 1998-07-06 00:00:00 | 13743735566 | 郑州市    |
    | S2021 | 董雯花    | 2000-07-30 00:00:00 | 13533735564 | 开封市    |
    | S2016 | 刘若非    | 2000-08-31 00:00:00 | 13683735533 | 开封市    |
    | S2013 | 曹梦德    | 1998-02-13 00:00:00 | 13853735522 | 郑州市    |
    | S2014 | 刘艳      | 1998-06-24 00:00:00 | 13623735335 | 郑州市    |
    | S2015 | 刘岩      | 1999-07-06 00:00:00 | 13813735225 | 信阳市    |
    | S2012 | 刘小青    | 1999-10-11 00:00:00 | 13603732255 | 新乡市    |
    | S2031 | 李明博    | 1999-10-26 00:00:00 | 13643732222 | 郑州市    |
    | S2032 | 达芬奇    | 1999-12-31 00:00:00 | 13043731234 | 郑州市    |
    +-------+-----------+---------------------+-------------+-----------+
    14 rows in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    三、使用数字代替列名或表达式

    在 ORDER BY 子句中可以使用数字代替列名或表达式,数字 n 的含义是指列名或表达式在 SELECT 子句中的序号。数字序号所代表的列或表达式必须出现在 SELECT 子句中。

    例如:

    (1)查询学生信息,按照 age 降序排列。

    -- order by 后面的 3 就是指按照 select 列表中的第 3 个选项排序
    mysql> select s_id, s_name, year(now()) - year(birth) age
        -> from student order by 3;
    +-------+-----------+------+
    | s_id  | s_name    | age  |
    +-------+-----------+------+
    | S2016 | 刘若非    |   22 |
    | S2021 | 董雯花    |   22 |
    | S2024 | 奥巴马    |   22 |
    | S2025 | 周健华    |   22 |
    | S2011 | 张晓刚    |   23 |
    | S2012 | 刘小青    |   23 |
    | S2015 | 刘岩      |   23 |
    | S2022 | 周华建    |   23 |
    | S2023 | 特朗普    |   23 |
    | S2031 | 李明博    |   23 |
    | S2032 | 达芬奇    |   23 |
    | S2013 | 曹梦德    |   24 |
    | S2014 | 刘艳      |   24 |
    | S2026 | 张学有    |   24 |
    +-------+-----------+------+
    14 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    (2)查询学生信息,按照 addr 降序和 phone 后 4 位降序排列。

    -- order by 后面的 4 表示 select 子句中的第四项(addr),3 表示 select 子句中的第 3 项(表达式)
    mysql> select s_id, s_name, right(phone,4) phone4, addr
        -> from student order by 4 desc, 3 desc;
    +-------+-----------+--------+-----------+
    | s_id  | s_name    | phone4 | addr      |
    +-------+-----------+--------+-----------+
    | S2022 | 周华建    | 5578   | 郑州市    |
    | S2026 | 张学有    | 5566   | 郑州市    |
    | S2013 | 曹梦德    | 5522   | 郑州市    |
    | S2014 | 刘艳      | 5335   | 郑州市    |
    | S2031 | 李明博    | 2222   | 郑州市    |
    | S2032 | 达芬奇    | 1234   | 郑州市    |
    | S2023 | 特朗普    | 5588   | 新乡市    |
    | S2012 | 刘小青    | 2255   | 新乡市    |
    | S2025 | 周健华    | 6655   | 开封市    |
    | S2021 | 董雯花    | 5564   | 开封市    |
    | S2016 | 刘若非    | 5533   | 开封市    |
    | S2024 | 奥巴马    | 5885   | 信阳市    |
    | S2011 | 张晓刚    | 5775   | 信阳市    |
    | S2015 | 刘岩      | 5225   | 信阳市    |
    +-------+-----------+--------+-----------+
    14 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    【OpenCV-Python】教程:3-13 Hough直线变换
    中国电子学会2023年09月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)
    Python:练习:编写一个程序,写入一个美金数量,然后显示出如何用最少的20美元、10美元、5美元和1美元来付款
    一、CSS弹性布局[弹性盒子、弹性元素]
    2023年网络安全市场五大增长热点
    IP地址SSL证书的作用是什么?
    云原生微服务 第五章 Spring Cloud Netflix Eureka集成负载均衡组件Ribbon
    智能组卷系统设计
    汽车诊断协议UDS概述
    Linux中国开源社区停止运营
  • 原文地址:https://blog.csdn.net/weixin_44377973/article/details/125905329