MySQL 中的 ORDER BY:带示例的 DESC 和 ASC 查询

排序结果

使用 SELECT 命令,结果的返回顺序与记录添加到数据库中的顺序相同。这是默认的排序顺序。在本节中,我们将研究如何对查询结果进行排序。排序只是以指定的方式重新排列查询结果。排序可以对单个列或多个列执行。它可以对数字、字符串以及日期数据类型进行。

MySQL 中的 ORDER BY 是什么?

MySQL ORDER BY 与 SELECT 查询结合使用,以有序的方式对数据进行排序。MySQL ORDER BY 子句用于按升序或降序对查询结果集进行排序。

SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];

HERE

  • SELECT 语句…” 是常规的 select 查询
  • “|” 表示替代项
  • “[WHERE condition | GROUP BY `field_name(s)` HAVING condition” 是用于过滤查询结果集的可选条件。
  • “ORDER BY” 执行查询结果集的排序
  • “[ASC | DESC]” 是用于将结果集按升序或降序排序的关键字。请注意,ASC 是默认使用的。
  • DESC 和 ASC 关键字是什么?

    DESC and ASC KeywordsASC 是 ascending 的缩写 DESC and ASC KeywordsMySQL DESC 是 descending 的缩写
    它用于按从上到下的样式对查询结果进行排序。 它用于按从下到上的样式对查询结果进行排序。
    处理日期数据类型时,最早的日期显示在列表的顶部。 处理日期类型时,最新的日期显示在列表的顶部。
    处理数字数据类型时,最小值显示在列表的顶部。 处理数字数据类型时,最大值显示在查询结果集的顶部。
    处理字符串数据类型时,查询结果集按从字母 A 开始到字母 Z 的顺序排序。 处理字符串数据类型时,查询结果集按从字母 Z 开始到字母 A 的顺序排序。

    SQL 的 DESC 和 ASC 关键字都与 SELECT 语句和 MySQL ORDER BY 子句结合使用。


    DESC 和 ASC 语法

    SQL DESC 排序关键字具有以下基本语法。

    SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC /DESC [LIMIT N]

    HERE

    • SELECT {fieldName(s) | *} FROM tableName(s) 是包含从中获取结果集的字段和表的语句。
    • [WHERE condition] 是可选的,但可用于根据给定条件过滤数据。
    • ORDER BY fieldname(s) 是必需的,并且是进行排序的字段。MySQL DESC 关键字指定排序为降序。
    • [LIMIT] 是可选的,但可用于限制从查询结果集中返回的结果数量。

    示例

    现在让我们看一个实际的例子 –

    SELECT * FROM members;

    在 MySQL Workbench 中针对 myflixdb 执行上述脚本,得到以下结果。

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter Male NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Male NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Male NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Male 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Male 24-08-1981 SouthPark P.O. Box 4563 987786553


假设市场部门希望按出生日期降序排列会员详细信息。这将有助于他们及时发送生日祝福。我们可以通过执行如下查询来获取该列表 –

SELECT * FROM members ORDER BY date_of_birth DESC;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本,得到以下结果。

DESC and ASC example

升序排列的相同查询

SELECT * FROM members ORDER BY date_of_birth ASC

DESC and ASC example

注意:NULL 值表示没有值(不是零或空字符串)。请注意它们的排序方式。

更多示例

让我们考虑以下 SQL sort by 脚本,它列出了所有会员记录。

SELECT * FROM `members`;

执行上述脚本会得到以下结果。

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter Male NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Male NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Male NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Male 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Male 24-08-1981 SouthPark P.O. Box 4563 987786553 NULL


如果我们想获得一个使用性别字段对查询结果集进行排序的列表,我们可以使用如下所示的脚本。

SELECT * FROM `members` ORDER BY `gender`;
membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com
5 Leonard Hofstadter Male NULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Male NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Male NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Male 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Male 24-08-1981 SouthPark P.O. Box 4563 987786553 NULL

“Female”会员显示在“Male”会员之前,这是因为当 ORDER BY DESC 子句不指定 ASC 或 MySQL DESC 关键字时,MySQL 默认按升序对查询结果集进行排序。

现在让我们看一个示例,该示例执行使用两个列进行排序;第一列默认按升序排序,第二列按降序排序。

SELECT * FROM `members` ORDER BY `gender`,`date_of_birth` DESC;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本,得到以下结果。

DESC and ASC example

性别列按升序默认排序,而出生日期列按降序显式排序。

为什么我们可能使用 DESC 和 ASC?

如果我们想打印视频库会员的付款历史记录,以帮助回答前台的查询,那么将付款按降序的时间顺序打印,从最近的付款到早期的付款,不是更合乎逻辑吗?

SQL 中的 DESC 是一个在此类情况下很有用的关键字。我们可以编写一个使用付款日期按降序对列表进行排序的查询。

假设市场部门想获取一个按类别划分的电影列表,供会员在租借电影时参考,那么将电影类别名称和标题按升序排序,以便会员能够快速从列表中查找信息,难道不是更合乎逻辑吗?

ASC 关键字在这种情况下很有用;我们可以按类别名称和电影标题以升序获取电影列表。

摘要

  • 排序查询结果是按升序或降序重新排列查询结果集返回的行。
  • SQL 中的 DESC 关键字用于按降序对查询结果集进行排序。
  • ASC 关键字用于按升序对查询结果集进行排序。
  • DESC 和 ASC 都与 ORDER BY 关键字结合使用。它们也可以与其他关键字结合使用,例如 WHERE 子句 和 LIMIT。
  • 当没有明确指定 ORDER BY 时,默认值为 ASC。