携手创作,共同成长!这是我参与「掘金日新计划 · 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语句后面跟上字段名称时,默认按照字段的数据进行升序排列。