MySQL入门查询进阶 ORDER BY

130 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

13.3.11 ORDER BY语句

MySQL支持使用ORDER BY语句对查询结果集进行排序处理,使用ORDER BY语句不仅支持对单列数据的排序,还支持对数据表中多列数据的排序。

语法格式如下:


SELECT * | column1 [,column2, … ,columnn] FROM table_name
[WHERE condition] ORDER BY column1 [ASC | DESC, column2 [ASC | DESC], … , 
columnn [ASC | DESC]]

1.对单列数据进行排序

例如,查询t_goods数据表中的数据,并按照t_stock字段进行升序排序。


mysql> SELECT id, t_category, t_name, t_price, t_stock
    -> FROM t_goods
    -> ORDER BY t_stock;
+----+----------------+-------------+---------+---------+
| id | t_category     | t_name       | t_price | t_stock |
+----+----------------+-------------+---------+---------+
|  5 | 女装/女士精品  | 百褶裙       |   29.90 |    500  |
| 11 | 户外运动        | 户外运动外套 |  799.90 |    500  |
|  1 | 女装/女士精品  | T恤         |   39.90 |   1000  |
|  7 | 户外运动        | 自行车       |  399.90 |   1000  |
|  6 | 女装/女士精品  | 呢绒外套     |  399.90 |   1200  |
| 12 | 户外运动        | 滑板         |  499.90 |   1200  |
|  3 | 女装/女士精品  | 卫衣         |   79.90 |   1500  |
|  9 | 户外运动        | 登山杖       |   59.90 |   1500  |
|  2 | 女装/女士精品  | 连衣裙       |   79.90 |   2500  |
|  8 | 户外运动        | 山地自行车   | 1399.90 |   2500  |
|  4 | 女装/女士精品  | 牛仔裤       |   89.90 |   3500  |
| 10 | 户外运动        | 骑行装备     |  399.90 |   3500  |
+----+----------------+-------------+---------+---------+
12 rows in set (0.00 sec)

由结果可知,结果数据按照t_stock字段进行了升序排序。

2.对多列数据进行排序

例如,查询t_goods数据表中的数据,先按照t_stock字段排序,再按照id字段排序。


mysql> SELECT id, t_category, t_name, t_price, t_stock
    -> FROM t_goods
    -> ORDER BY t_stock, id;
+----+----------------+-------------+---------+---------+
| id | t_category     | t_name       | t_price | t_stock |
+----+----------------+-------------+---------+---------+
|  5 | 女装/女士精品  | 百褶裙       |   29.90 |    500  |
| 11 | 户外运动        | 户外运动外套 |  799.90 |    500  |
|  1 | 女装/女士精品  | T恤         |   39.90 |   1000  |
|  7 | 户外运动        | 自行车       |  399.90 |   1000  |
|  6 | 女装/女士精品  | 呢绒外套     |  399.90 |   1200  |
| 12 | 户外运动        | 滑板         |  499.90 |   1200  |
|  3 | 女装/女士精品  | 卫衣         |   79.90 |   1500  |
|  9 | 户外运动        | 登山杖       |   59.90 |   1500  |
|  2 | 女装/女士精品  | 连衣裙       |   79.90 |   2500  |
|  8 | 户外运动        | 山地自行车   | 1399.90 |   2500  |
|  4 | 女装/女士精品  | 牛仔裤       |   89.90 |   3500  |
| 10 | 户外运动        | 骑行装备     |  399.90 |   3500  |
+----+----------------+-------------+---------+---------+

注意:当在MySQL中使用ORDER BY对多列数据进行排序时,只有当第一列的数据相同时才会对第二列的数据进行排序。如果第一列的数据不同,则只会对第一列的数据进行排序,而不会对第二列的数据进行排序。如果ORDER BY后面有更多的表字段,依然遵循当前面字段相同时才会对后面的字段数据排序,否则不会对后面的字段数据排序的规则。

3.排序时指定方向

ORDER BY语句使用ASC按照字段的数据进行升序排列,使用DESC按照字段的数据进行降序排列。

例如,查询t_goods数据表中的数据,并按照id字段进行降序排列。


mysql> SELECT id, t_category, t_name, t_price, t_stock
    -> FROM t_goods
    -> ORDER BY id DESC;
+----+----------------+-------------+---------+---------+
| id | t_category     | t_name       | t_price | t_stock |
+----+----------------+-------------+---------+---------+
| 12 | 户外运动        | 滑板         |  499.90 |   1200  |
| 11 | 户外运动        | 户外运动外套 |  799.90 |    500  |
| 10 | 户外运动        | 骑行装备     |  399.90 |   3500  |
|  9 | 户外运动        | 登山杖       |   59.90 |   1500  |
|  8 | 户外运动        | 山地自行车   | 1399.90 |   2500  |
|  7 | 户外运动        | 自行车       |  399.90 |   1000  |
|  6 | 女装/女士精品  | 呢绒外套     |  399.90 |   1200  |
|  5 | 女装/女士精品  | 百褶裙       |   29.90 |    500  |
|  4 | 女装/女士精品  | 牛仔裤       |   89.90 |   3500  |
|  3 | 女装/女士精品  | 卫衣         |   79.90 |   1500  |
|  2 | 女装/女士精品  | 连衣裙       |   79.90 |   2500  |
|  1 | 女装/女士精品  | T恤         |   39.90 |   1000  |
+----+----------------+-------------+---------+---------+
12 rows in set (0.00 sec)

可以看到,查询的结果数据按照id字段进行了降序排列。

ORDER BY语句支持对一个字段进行升序排列,同时对另一个字段进行降序排列。例如,查询t_goods数据表中的数据,按照t_stock字段进行升序排列,并且按照id字段进行降序排列。


mysql> SELECT id, t_category, t_name, t_price, t_stock
    -> FROM t_goods
    -> ORDER BY t_stock ASC, id DESC;
+----+----------------+-------------+---------+---------+
| id | t_category     | t_name       | t_price | t_stock |
+----+----------------+-------------+---------+---------+
| 11 | 户外运动        | 户外运动外套 |  799.90 |    500  |
|  5 | 女装/女士精品  | 百褶裙       |   29.90 |    500  |
|  7 | 户外运动        | 自行车       |  399.90 |   1000  |
|  1 | 女装/女士精品  | T恤         |   39.90 |   1000  |
| 12 | 户外运动        | 滑板         |  499.90 |   1200  |
|  6 | 女装/女士精品  | 呢绒外套     |  399.90 |   1200  |
|  9 | 户外运动        | 登山杖       |   59.90 |   1500  |
|  3 | 女装/女士精品  | 卫衣         |   79.90 |   1500  |
|  8 | 户外运动        | 山地自行车   | 1399.90 |   2500  |
|  2 | 女装/女士精品  | 连衣裙       |   79.90 |   2500  |
| 10 | 户外运动        | 骑行装备     |  399.90 |   3500  |
|  4 | 女装/女士精品  | 牛仔裤       |   89.90 |   3500  |
+----+----------------+-------------+---------+---------+
12 rows in set (0.00 sec)

结果数据先按照t_stock字段进行升序排列,当t_stock字段相同时,按照id字段进行降序排列。

注意:直接使用ORDER BY语句后面跟上字段名称时,默认按照字段的数据进行升序排列。