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 是默认使用的。
- SELECT {fieldName(s) | *} FROM tableName(s) 是包含从中获取结果集的字段和表的语句。
- [WHERE condition] 是可选的,但可用于根据给定条件过滤数据。
- ORDER BY fieldname(s) 是必需的,并且是进行排序的字段。MySQL DESC 关键字指定排序为降序。
- [LIMIT] 是可选的,但可用于限制从查询结果集中返回的结果数量。
DESC 和 ASC 关键字是什么?
它用于按从上到下的样式对查询结果进行排序。 | 它用于按从下到上的样式对查询结果进行排序。 |
处理日期数据类型时,最早的日期显示在列表的顶部。 | 处理日期类型时,最新的日期显示在列表的顶部。 |
处理数字数据类型时,最小值显示在列表的顶部。 | 处理数字数据类型时,最大值显示在查询结果集的顶部。 |
处理字符串数据类型时,查询结果集按从字母 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 * FROM members;
在 MySQL Workbench 中针对 myflixdb 执行上述脚本,得到以下结果。
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
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 执行上述脚本,得到以下结果。
升序排列的相同查询
SELECT * FROM members ORDER BY date_of_birth ASC
注意:NULL 值表示没有值(不是零或空字符串)。请注意它们的排序方式。
更多示例
让我们考虑以下 SQL sort by 脚本,它列出了所有会员记录。
SELECT * FROM `members`;
执行上述脚本会得到以下结果。
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
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 | |
---|---|---|---|---|---|---|---|
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 和 ASC?
如果我们想打印视频库会员的付款历史记录,以帮助回答前台的查询,那么将付款按降序的时间顺序打印,从最近的付款到早期的付款,不是更合乎逻辑吗?
SQL 中的 DESC 是一个在此类情况下很有用的关键字。我们可以编写一个使用付款日期按降序对列表进行排序的查询。
假设市场部门想获取一个按类别划分的电影列表,供会员在租借电影时参考,那么将电影类别名称和标题按升序排序,以便会员能够快速从列表中查找信息,难道不是更合乎逻辑吗?
ASC 关键字在这种情况下很有用;我们可以按类别名称和电影标题以升序获取电影列表。
摘要
- 排序查询结果是按升序或降序重新排列查询结果集返回的行。
- SQL 中的 DESC 关键字用于按降序对查询结果集进行排序。
- ASC 关键字用于按升序对查询结果集进行排序。
- DESC 和 ASC 都与 ORDER BY 关键字结合使用。它们也可以与其他关键字结合使用,例如 WHERE 子句 和 LIMIT。
- 当没有明确指定 ORDER BY 时,默认值为 ASC。