Order by
SQL中的ORDER BY子句用於指定SELECT語句返回的結果集按一個或多個列的值進行排序。用於排序的標準(即排序列)並不一定要包含在最終的結果集中(但在SELECT DISTINCT, GROUP BY, UNION [DISTINCT], EXCEPT [DISTINCT]、INTERSECT [DISTINCT]等操作中存在某些限制)。排序標準可以是表達式,包括列名、用戶自定義函數、算術運算或CASE表達式。系統會計算這些表達式的值,並根據計算結果(如列中存儲的值或函數調用結果)進行排序。
ORDER BY是對結果集中的行進行排序的唯一方法。如果沒有該子句,關係數據庫系統返回行的順序是隨機的(即任何順序)。如果應用程序需要特定的順序,則必須在發送的SELECT語句中提供ORDER BY。雖然某些數據庫系統允許在子查詢或視圖定義中使用ORDER BY子句,但它們通常對最終結果集的順序沒有影響,除非與偏移量(OFFSET)或取前N行(FETCH FIRST/LIMIT)子句結合使用才有意義。視圖是一個邏輯上的關係表,而關係模型要求表是行的集合,這意味着表本身不帶有任何排序屬性。唯一的例外是像ORDER BY ORDER OF ...(未在 SQL:2003中標準化)這樣的結構,它允許排序標準在嵌套子查詢中傳遞。
SQL標準的核心功能並未明確定義空值(NULL)的默認排序順序。根據SQL:2003擴展 T611(Elementary OLAP operations),可以使用ORDER BY列表中的NULLS FIRST或NULLS LAST子句,分別將空值排在所有數據值之前或之後。然而,並非所有數據庫都實現了這一功能。未實現此功能的數據庫可能指定不同的Null排序處理方式。[1]
使用ORDER BY ... DESC表示降序排列,否則默認為升序排列(升序也可以使用ASC顯式指定)。
例子
[編輯]SELECT * FROM Employees
ORDER BY LastName, FirstName
參考文獻
[編輯]- ^ NULL Handling in SQLite Versus Other Database Engines. [January 25, 2009]. (原始內容存檔於2013-07-08).