首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL ORDER BY 完整教學:排序語法、升降序、多欄位排序與實戰範例

     編輯:SQL 基礎

SQL ORDER BY 排序完整教學


ORDER BY 用於對查詢結果集進行排序。支援單欄位、多欄位、升序(ASC)、降序(DESC),是報表、分頁、Top-N 查詢的基礎。


基本語法

SELECT column_name, column_name
FROM table_name
ORDER BY column_name, column_name ASC|DESC;
  • 預設為 ASC(升序:小到大、A-Z、舊到新)。
  • DESC 為降序(大到小、Z-A、新到舊)。
  • 多欄位排序:先按第一欄位排序,相同值再按第二欄位排序,以此類推。
  • ORDER BY 子句必須置於 SELECT 陳述式末端(LIMIT/OFFSET 之前)。

演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

實戰範例

範例 1:單欄位升序 - 依 alexa 排序

SELECT * FROM Websites ORDER BY alexa;

輸出結果:

alexa 從小到大:1(Google)、3(Facebook)、13(淘寶)、20(微博)、4689(菜鳥教程)。

範例 2:單欄位降序 - 依 alexa 降序

SELECT * FROM Websites ORDER BY alexa DESC;

輸出結果:

範例 3:多欄位排序 - 先 country 升序,再 alexa 升序

SELECT * FROM Websites ORDER BY country, alexa;

輸出結果:

先按 country 分組(CN 在前、USA 在後,視字元編碼),組內再按 alexa 升序。


進階排序技巧

1. 排序別名/運算式

SELECT name, alexa * 10 AS score
FROM Websites
ORDER BY score DESC;

2. 排序 CASE 運算式(自訂順序)

SELECT * FROM Websites
ORDER BY CASE country
  WHEN 'CN' THEN 1
  WHEN 'USA' THEN 2
  ELSE 3
END, alexa;

3. NULL 值排序控制

  • 標準 SQL:ORDER BY col NULLS FIRST / NULLS LAST(PostgreSQL、Oracle 12c+、SQL Server 支援)。
  • MySQL:ORDER BY ISNULL(col), col 讓 NULL 排前;ORDER BY col IS NULL, col 讓 NULL 排後。

4. 隨機排序

  • MySQL:ORDER BY RAND()
  • PostgreSQL:ORDER BY RANDOM()
  • SQL Server:ORDER BY NEWID()
  • Oracle:ORDER BY DBMS_RANDOM.VALUE

效能與索引關係

  • ORDER BY 欄位若有索引,且查詢無 WHERE 或 WHERE 可用同索引,可避免 Filesort,直接索引掃描輸出。
  • 多欄位排序需複合索引順序與 ORDER BY 順序一致(含 ASC/DESC 方向)。
  • LIMIT 配合索引排序可大幅提升 Top-N 查詢效能。

常見錯誤

  • 未加 ORDER BY 卻假設結果有序:關聯式資料庫不保證無 ORDER BY 時的輸出順序。
  • 字串欄位排序受 Collation 影響,大小寫、全半形排序可能不符預期。
  • 分頁查詢缺少 ORDER BY 導致翻頁資料重複或遺漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved