SQL ORDER BY 排序
SQL ORDER BY 排序 · 难度:入门 · +10XP
SQL ORDER BY 排序
ORDER BY子句用于对查询结果进行排序。可以按一个或多个列排序,支持升序(ASC)和降序(DESC)两种方式。
基本排序
-- 按成绩升序(默认ASC,从小到大)
SELECT name, score FROM students ORDER BY score;
-- 按成绩降序(DESC,从大到小)
SELECT name, score FROM students ORDER By score DESC;
-- 按年龄升序,年龄相同则按成绩降序
SELECT name, age, score FROM students ORDER BY age ASC, score DESC;
排序规则对比
| ASC(升序) | DESC(降序) |
|---|---|
| 数字:1, 2, 3, ... | 数字:100, 99, 98, ... |
| 字母:A, B, C, ... | 字母:Z, Y, X, ... |
| 日期:旧→新 | 日期:新→旧 |
| NULL 通常排在最前 | NULL 通常排在最后 |
多种排序示例
-- 按入学日期排序(最新入学的在前)
SELECT name, enroll_date FROM students ORDER BY enroll_date DESC;
-- 多重排序:先按城市,再按成绩
SELECT city, name, score FROM students ORDER BY city, score DESC;
-- 按字符串长度排序(MySQL)
SELECT name FROM students ORDER BY LENGTH(name) DESC;
-- 自定义排序(MySQL FIELD函数)
SELECT name, city FROM students
ORDER BY FIELD(city, '南宁', '桂林', '柳州');
-- 南宁排第一,桂林第二,柳州第三,其他在后
ORDER BY 与 LIMIT 配合
-- 成绩最高的3名(TOP N查询)
SELECT name, score FROM students ORDER BY score DESC LIMIT 3;
-- 成绩最低的3名
SELECT name, score FROM students ORDER BY score ASC LIMIT 3;
-- 分页查询(第二页,每页10条)
SELECT * FROM students ORDER BY id LIMIT 10 OFFSET 10;
实战练习
- 按姓名拼音排序(ORDER BY name)列出所有学生
- 查询成绩最高的前5名学生
- 先按城市分组列出,每个城市内按成绩从高到低排列
- 排序时把NULL值排到最后(提示:ORDER BY ISNULL(col), col)