萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL ORDER BY 排序完全指南:ASC/DESC、非選擇欄位、運算式、別名、位置、多欄位

ORDER BY 是查詢結果排序的唯一標準語法。本文涵蓋升冪/降冪、非 SELECT 列排序、運算式/別名/位置排序、多欄位優先序、UNION 排序限制。

基本語法

SELECT select_list
FROM table
[WHERE ...]
ORDER BY sort_expression [ASC | DESC] [, ...];
  • ASC (預設):遞增 (1→9, A→Z, 早→晚)
  • DESC:遞減 (9→1, Z→A, 晚→早)

六大實用模式

1. 非選擇清單欄位排序

SELECT emp_name, salary
FROM employees
ORDER BY hire_date DESC;  -- hire_date 不在 SELECT 中

2. 運算式排序

SELECT emp_name, salary, commission_pct
FROM employees
ORDER BY salary * (1 + ISNULL(commission_pct, 0)) DESC;  -- 總薪資排序

3. 別名排序

SELECT emp_name AS Name, salary * 12 AS Annual_Sal
FROM employees
ORDER BY Annual_Sal DESC;  -- 使用別名

4. 位置排序 (位置從 1 起算)

SELECT emp_name, department_id, salary
FROM employees
ORDER BY 2, 3 DESC;  -- 先按第 2 欄部門升冪,再按第 3 欄薪資降冪

UNION 必須用位置排序,因兩側 SELECT 欄位名可能不同。

5. 多欄位排序 (優先序)

SELECT department_id, emp_name, salary
FROM employees
ORDER BY department_id ASC, salary DESC;  
-- 先按部門升冪,部門相同者按薪資降冪

6. NULL 排序行為

資料庫ASC (預設)DESC
SQL ServerNULL 在前NULL 在後
MySQLNULL 在前NULL 在後
OracleNULL 在後NULL 在前
PostgreSQLNULL 在前NULL 在後

可用 ORDER BY col ASC NULLS LAST (PostgreSQL/Oracle 12c+) 顯式控制。

效能優化

  • 排序欄位有索引 → 避免 Sort 運算子
  • 大結果集 + ORDER BY + TOP/LIMIT → **Top-N Sort** 優化,僅保留前 N
  • 避免在 ORDER BY 用複雜函數/CASE,改用計算欄位/索引視圖
copyright © 萬盛學電腦網 all rights reserved