2022-11-04 02:48:04
ORDER BY 是 SQL 中用于对查询结果集进行排序的核心子句,其核心功能是通过指定列或表达式控制记录的显示顺序。以下是详细说明:
一、基础语法与参数column_name:指定排序依据的列名或表达式。
ASC(默认):升序排列(A-Z,0-9)。
DESC:降序排列(Z-A,9-0)。
单列排序
SELECT * FROM employees ORDER BY last_name ASC;结果按 last_name 字母升序排列,空值默认排在最前(升序时)或最后(降序时)。
多列排序
SELECT * FROM employees ORDER BY department_id ASC, salary DESC;先按 department_id 升序分组,同部门内再按 salary 降序排列。
表达式排序
SELECT product_name, (price * quantity) AS total_valueFROM productsORDER BY total_value DESC;支持基于计算列或函数结果排序。
索引利用:
对排序列建立索引可显著提升性能(如 CREATE INDEX idx_lastname ON employees(last_name))。
多列排序时,复合索引顺序需与 ORDER BY 顺序匹配。
查询优化建议:
避免在 ORDER BY 中使用复杂表达式(如 ORDER BY UPPER(last_name)),除非必要。
分页查询时,优先使用 WHERE 过滤减少排序数据量。
报表生成:
SELECT salesperson, SUM(amount) AS total_salesFROM salesGROUP BY salespersonORDER BY total_sales DESCLIMIT 10;获取销售额前十的销售员。
数据清洗:
SELECT id, name, emailFROM usersWHERE email IS NULLORDER BY registration_date ASC;优先处理早期注册的未验证用户。
多条件优先级:
SELECT task_name, priority, due_dateFROM tasksORDER BY priority ASC, due_date ASC;高优先级任务优先,同优先级按截止日期排序。
MySQL 8.0+ 支持 NULLS FIRST/LAST 语法。
Oracle 默认将 NULL 视为最大值(与标准 SQL 一致)。
通过合理使用 ORDER BY,可以确保数据以符合业务逻辑的顺序呈现,同时结合索引优化可显著提升查询效率。