SQL 邏輯執行順序(標準):
執行到 ORDER BY 時,SELECT 尚未投射最終欄位,關聯表的所有欄位仍在中間結果集中,故可引用 `age` 排序。最終輸出時才依 SELECT 清單裁剪欄位。
-- PostgreSQL / MySQL / SQL Server 均可執行
EXPLAIN SELECT id, name FROM tb_student ORDER BY age;
-- 執行計畫會顯示 Sort Key: age
| 誤區 | 事實 |
|---|---|
| ORDER BY 只能用 SELECT 欄位 | 可用表達式、未輸出欄位、聚合函式(配合 GROUP BY) |
| 別名在 ORDER BY 不可用 | 標準 SQL 允許 ORDER BY 使用 SELECT 別名(因 ORDER BY 在 SELECT 之後) |
| DISTINCT + ORDER BY 未 SELECT 欄位會報錯 | 部分資料庫(如 PostgreSQL)要求 ORDER BY 欄位必須出現在 SELECT 清單 |