ORDER BY 是 MySQL 中控制查询结果排序的核心子句,默认升序(ASC),可显式指定 ASC 或 DESC;必须位于 SELECT 语句末尾,支持多列、表达式、别名排序,NULL 默认升序在前、降序在后。

在 MySQL 中,ORDER BY 是控制查询结果排序的核心子句,它默认按升序(ASC)排列,也可显式指定升序或降序(DESC)。
基础语法与默认行为
ORDER BY 必须写在 SELECT 语句的末尾(位于 WHERE、GROUP BY、HAVING 之后)。不写排序方向时,MySQL 自动按升序处理:
SELECT name, score FROM students ORDER BY score;
等价于:SELECT name, score FROM students ORDER BY score ASC;
明确指定升序或降序
使用 ASC 或 DESC 关键字可精准控制单列或多列的排序方向:
- 按分数降序查前5名:SELECT * FROM students ORDER BY score DESC LIMIT 5;
- 先按部门升序,再按入职时间降序:SELECT * FROM employees ORDER BY dept ASC, hire_date DESC;
- 混合方向常见于报表场景,比如“同销量下新上架优先”:ORDER BY sales DESC, created_at DESC
对表达式或别名排序
ORDER BY 支持按计算字段或列别名排序,提升灵活性:
- 按姓名长度排序:SELECT name FROM users ORDER BY LENGTH(name);
- 用别名简化写法:SELECT price * qty AS total FROM orders ORDER BY total DESC;
- 注意:不能在
WHERE中引用别名,但ORDER BY可以——这是它的特殊权限
空值(NULL)的排序规则
MySQL 中 NULL 默认排在最前(ASC)或最后(DESC),但行为取决于 SQL 模式。如需统一控制:
- 让 NULL 总是排最后(升序时):ORDER BY IF(ISNULL(col), 1, 0), col ASC
- 更简洁方式(MySQL 8.0+):ORDER BY col ASC NULLS LAST(需开启 ANSI 模式或确认版本支持)
- 实际开发中建议在业务层或查询前用
COALESCE(col, '默认值')避免歧义


















