SQL 筆記:排序查詢結果 SELECT ORDER BY

在 SQL 中,一般從資料表篩選資料的時候,如果沒有指定特別的排序順序,會無法預測資料的結果會按照什麼樣的順序排列。

即使是相同的 SELECT 指令,每次執行的時候可能後會出現不同的結果。但在實務應用中,如果沒有按照排序整理資料,會讓資料變得難以使用。這時,我們就會需要 ORDER BY 這個重要的子句來協助我們排序。

這時可以使用 ORDER BY 對搜尋結果進行排序。在預設情況下,使用 ORDER BY 的排序結果為 ASC 升冪排列,項目會由低至高遞增出現,如果要降冪排列可使用 DESC 的關鍵字。

舉例來說,若要以年份排序:

  • 升冪排列,可寫成 ORDER BY years ASC,或是是忽略不寫:ORDER BY years;
  • 降冪排列,可寫成 ORDER BY years DESC。
注意:不論在什麼狀況下,ORDER BY 子句都一定要寫在整段 SELECT 的最後位置。因為在資料庫的邏輯當中,排序是回傳結果前的最後一道步驟。

語法

SELECT $column1, $column2, ...
FROM $table_name
ORDER BY $column1, $column2, ... ASC|DESC;

範例:從 Customers 表中選擇所有資料,按 Country 預設升冪 ASC 排序:

SELECT * FROM Customers
ORDER BY Country;

範例:從 Customers 表中選擇所有資料,按 Country 降冪 DESC 排序:

SELECT * FROM Customers
ORDER BY Country DESC;

多重示例

ORDER BY 可以使用多重排序,意思是首個排序規則按照我們的條件,接著從已排好的排序,按照 ORDER BY 第二個排序條件去細排,接著再按照第三、第四..條件去排,以此類推。

範例:從 Customers 表中選擇所有資料,按 Country 和 CustomerName 排序。
這意味著首先按 Country 排序,但如果某些行具有相同的 Country,它會按 CustomerName 對它們進行排序:

SELECT * FROM Customers
ORDER BY Country, CustomerName;

範例:從 Customers 表中選擇所有資料,按 Country 升冪 ASC 排序,按 CustomerName 降冪 DESC 排序:

SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

範例:
從 Products 表中中選擇所有資料,找出價格在 15 元以上,並且結果請照 Product Name 降冪排序後再按照 Price 排序。

SELECT * 
  FROM Products
 WHERE Price>15
 ORDER BY ProductName DESC, Price ASC;