排序数据
如果想对SELECT语句检索出的数据进行明确的排序,可以使用ORDER BY。
ORDER BY选取一个或多个列的名字,据此对数据进行排序。
按单个列排序
Students表:
| id | class_id | name | gender | score |
| --- | -------- | ---- | ------ | ----- |
| 1 | 1 | 小明 | M | 90 |
| 2 | 1 | 小红 | F | 95 |
| 3 | 1 | 小军 | M | 88 |
| 4 | 1 | 小米 | F | 73 |
| 5 | 2 | 小白 | F | 81 |
| 6 | 2 | 小兵 | M | 55 |
| 7 | 2 | 小林 | M | 85 |
| 8 | 3 | 小新 | F | 91 |
| 9 | 3 | 小王 | M | 89 |
| 10 | 3 | 小丽 | F | 88 |
SELECT name,score FROM Students ORDER BY score;
+------+-------+
| name | score |
+------+-------+
| 小兵 | 55 |
| 小米 | 73 |
| 小白 | 81 |
| 小林 | 85 |
| 小军 | 88 |
| 小丽 | 88 |
| 小王 | 89 |
| 小明 | 90 |
| 小新 | 91 |
| 小红 | 95 |
+------+-------+
必须保证ORDER BY是SELECT语句中的最后一条子句,否则出现错误消息。
按多个列排序
按多个列排序,只需在列名之间用逗号分开即可。
SELECT name,gender,score FROM Students ORDER BY score,gender;
+-------+--------+-------+
| name | gender | score |
+-------+--------+-------+
| 小兵 | M | 55 |
| 小米 | F | 73 |
| 小白 | F | 81 |
| 小林 | M | 85 |
| 小丽 | F | 88 |
| 小军 | M | 88 |
| 小王 | M | 89 |
| 小明 | M | 90 |
| 小新 | F | 91 |
| 小红 | F | 95 |
+-------+--------+-------+
按多个列排序时,在多个行具有相同的score值时,才会按gender进行排序,例如小丽和小军都是88,因此会按gender进行排序。
如果score列中所有的值都是唯一的,则不会按gender排序。
排序方向
ORDER BY的默认排序顺序是升序(数字从小到大,字母从A到Z),如果想进行降序排序,需要指定DESC关键字。
SELECT name,score FROM Students ORDER BY score DESC;
+------+-------+
| name | score |
+------+-------+
| 小红 | 95 |
| 小新 | 91 |
| 小明 | 90 |
| 小王 | 89 |
| 小军 | 88 |
| 小丽 | 88 |
| 小林 | 85 |
| 小白 | 81 |
| 小米 | 73 |
| 小兵 | 55 |
+------+-------+
如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。