首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

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

     編輯:MySQL 資料庫相關知識

ORDER BY 是 SQL 結果集排序的唯一標準語法。本文整理升冪/降冪、多欄位、運算式、別名、欄位位置、非選取欄位等六大實戰用法。

基礎語法

SELECT col1, col2 FROM tbl
ORDER BY sort_col1 [ASC|DESC], sort_col2 [ASC|DESC], ...;
  • ASC (預設) 遞增,DESC 遞減。
  • 多欄位依序比較:第一欄相同才比第二欄,以此類推。

六大進階用法

用法範例說明
非選取欄位排序SELECT name FROM emp ORDER BY salary DESC;SELECT 清單未出現的欄位亦可排序
運算式排序SELECT qty, price, qty*price AS amount FROM sales ORDER BY qty*price DESC;直接用算術運算式
別名排序SELECT qty*price AS amount FROM sales ORDER BY amount;使用 SELECT 定義的別名
欄位位置排序SELECT dept_id, emp_id FROM emp ORDER BY 1, 2;1=第一欄,UNION 查詢欄位名不同時必須用位置
多欄位混合排序ORDER BY dept_id ASC, salary DESC;部門升冪、同部門薪資降冪
NULL 排序控制ORDER BY col NULLS FIRST / LAST (Oracle/PostgreSQL)SQL Server 預設 NULL 視為最小值 (ASC 時最前)

實戰範例 (對應原文圖示)

-- 升冪 (預設)
SELECT * FROM employees ORDER BY hire_date;

-- 降冪
SELECT * FROM employees ORDER BY salary DESC;

-- 非選取欄位
SELECT emp_name FROM employees ORDER BY dept_id;

-- 運算式
SELECT product_id, unit_price, quantity, unit_price*quantity AS total
FROM order_details ORDER BY unit_price*quantity DESC;

-- 別名
SELECT emp_name, salary*12 AS annual_sal FROM employees ORDER BY annual_sal;

-- 位置 (配合 UNION)
SELECT dept_id AS d, emp_name FROM employees
UNION
SELECT dept_id, emp_name FROM retired_emp
ORDER BY 1, 2;

效能提示

  • 排序欄位建立索引可避免 Sort 運算子,大幅降低 CPU/記憶體。
  • TOP N / LIMIT 搭配 ORDER BY 可只排序前 N 筆 (Top-N Sort)。
  • 避免在大型結果集上使用無索引排序,必要時先篩選再排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved