如何在mysql中进行排序查询_mysql order by排序说明

来源:这里教程网 时间:2026-02-28 20:43:47 作者:

在 MySQL 中,ORDER BY 是实现结果集排序的核心子句,它必须出现在 SELECT 语句的末尾(在 WHEREGROUP BYHAVING 之后,LIMIT 之前),用于按一个或多个字段对查询结果进行升序或降序排列。

基本语法与默认排序方向

ORDER BY 后跟字段名,默认按升序(ASC)排列;显式写 ASCDESC 可控制方向:

SELECT * FROM users ORDER BY age;
→ 按 age 升序(等价于
ORDER BY age ASC
SELECT * FROM users ORDER BY age DESC;
→ 按 age 降序
NULL 值在升序中排最前,降序中排最后(MySQL 默认行为,可被
ORDER BY ... IS NULL
调整)

多字段排序:优先级从左到右

当指定多个排序字段时,MySQL 先按第一个字段排序;第一个字段值相同时,再按第二个字段排序,依此类推:

SELECT * FROM orders ORDER BY status ASC, created_at DESC;
→ 先按状态升序(如 pending、shipped、done),同状态内按创建时间降序(最新在前)
字段类型需支持比较操作;对字符串排序区分大小写与否,取决于字段的校对规则(collation)

按表达式或别名排序

ORDER BY 支持使用计算字段、函数或 SELECT 中定义的列别名(注意:不能使用列位置编号如

ORDER BY 2
,除非 SQL_MODE 包含 ONLY_FULL_GROUP_BY 关闭时才允许,但不推荐):

SELECT name, salary/12 AS monthly FROM employees ORDER BY monthly DESC;
→ 按月均工资降序
SELECT CONCAT(last_name, ', ', first_name) AS full_name FROM staff ORDER BY full_name;
避免在 ORDER BY 中重复复杂表达式,建议用别名提升可读性与执行效率

性能提示:排序与索引的关系

ORDER BY 能否走索引直接影响查询速度。当排序字段有合适索引时,MySQL 可能避免额外的文件排序(Using filesort):

单字段排序:为
ORDER BY col
建立
INDEX(col)
多字段排序:索引顺序需匹配 ORDER BY 字段顺序和方向(如
ORDER BY a ASC, b DESC
,MySQL 8.0+ 支持混合方向索引;旧版本建议统一方向)
WHERE + ORDER BY 组合常见,联合索引设计应兼顾过滤条件和排序需求(例如
WHERE dept = ? ORDER BY hire_date
→ 建议索引
(dept, hire_date)

相关推荐