如果想对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关键字。