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, 晚→早)SELECT emp_name, salary
FROM employees
ORDER BY hire_date DESC; -- hire_date 不在 SELECT 中

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

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

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

UNION 必須用位置排序,因兩側 SELECT 欄位名可能不同。
SELECT department_id, emp_name, salary
FROM employees
ORDER BY department_id ASC, salary DESC;
-- 先按部門升冪,部門相同者按薪資降冪

| 資料庫 | ASC (預設) | DESC |
|---|---|---|
| SQL Server | NULL 在前 | NULL 在後 |
| MySQL | NULL 在前 | NULL 在後 |
| Oracle | NULL 在後 | NULL 在前 |
| PostgreSQL | NULL 在前 | NULL 在後 |
可用 ORDER BY col ASC NULLS LAST (PostgreSQL/Oracle 12c+) 顯式控制。