ORDER BY 是 MySQL 中控制查询结果排序的核心子句,默认升序(ASC),可显式指定 ASC 或 DESC;必须位于 SELECT 语句末尾,支持多列、表达式、别名排序,NULL 默认升序在前、降序在后。
在 MySQL 中,
是控制查询结果排序的核心子句,它默认按升序(
)排列,也可显式指定升序或降序(
)。
基础语法与默认行为
必须写在
语句的末尾(位于
、
、
之后)。不写排序方向时,MySQL 自动按升序处理:
SELECT name, score FROM students ORDER BY score;
等价于:
SELECT name, score FROM students ORDER BY score ASC;
明确指定升序或降序
使用
或
关键字可精准控制单列或多列的排序方向:
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
按分数降序查前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
对表达式或别名排序
支持按计算字段或列别名排序,提升灵活性:
按姓名长度排序:
SELECT name FROM users ORDER BY LENGTH(name);
用别名简化写法:
SELECT price * qty AS total FROM orders ORDER BY total DESC;
注意:不能在
中引用别名,但
可以——这是它的特殊权限
空值(NULL)的排序规则
MySQL 中
默认排在最前(
)或最后(
),但行为取决于 SQL 模式。如需统一控制:
让 NULL 总是排最后(升序时):
ORDER BY IF(ISNULL(col), 1, 0), col ASC
更简洁方式(MySQL 8.0+):
ORDER BY col ASC NULLS LAST
(需开启 ANSI 模式或确认版本支持)
实际开发中建议在业务层或查询前用
避免歧义
ORDER BYASCDESCORDER BYSELECTWHEREGROUP BYHAVINGASCDESCORDER BYWHEREORDER BYNULLASCDESCCOALESCE(col, '默认值')