本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ORDER BY 子句
ORDER BY 子句會排序查詢的結果集。
語法
[ ORDER BY expression [ ASC | DESC ] ] [ NULLS FIRST | NULLS LAST ] [ LIMIT { count | ALL } ] [ OFFSET start ]
參數
- 運算式
-
此表達式會排序查詢結果集的順序,通常是藉由指定選取清單中的一個或多個資料欄。結果會根據二進位 UTF-8 順序傳回。您還可以指定下列項目:
-
不在選取清單中的資料欄
-
由查詢所參考資料表中的一個或多個資料欄構成的表達式
-
代表選取清單項目位置的序數 (或是,若沒有選取清單的話,則為資料欄在資料表中的位置)
-
定義選取清單項目的別名
當 ORDER BY 子句包含多個表達式時,結果集會根據第一個表達式排序,然後對擁有與第一個表達式相符之值的資料列套用第二個表達式,以此類推。
-
- ASC | DESC
-
此選項會定義表達式的排序順序,如下所示:
-
ASC:遞增 (例如,數值從低到高,字元字串 'A' 到 'Z')。若未指定選項,資料會預設為遞增排序。
-
DESC:遞減 (數值從高到低,字串 'Z' 到 'A')。
-
- NULLS FIRST | NULLS LAST
-
這些選項指定 NULL 值應該排序在最前 (在非 null 值之前) 或排序在最後 (在非 null 值之後)。根據預設,依 ASC 順序排序時,NULL 值排在最後面,而依 DESC 順序排序時,則排在最前面。
- LIMIT number | ALL
-
此選項會控制查詢傳回的排序資料列數。LIMIT 數字必須是正整數;最大值為
2147483647
。LIMIT 0 不會傳回任何資料列。您可以使用此語法進行測試:查看查詢執行情形 (不顯示任何資料列),或從資料表傳回資料欄清單。若您使用 LIMIT 0 傳回資料欄清單,則 ORDER BY 子句是多餘的。預設值為 LIMIT ALL。
- OFFSET start
-
此選項會指定先略過 start 之前的資料列數,再開始傳回資料列。OFFSET 數字必須是正整數;最大值為
2147483647
。搭配 LIMIT 選項使用時,會先略過 OFFSET 資料列,再開始計算傳回的 LIMIT 資料列。如果未使用 LIMIT 選項,則結果集中的資料列數會減掉略過的資料列數。OFFSET 子句略過的資料列仍須經過掃描,因此使用較大的 OFFSET 值可能會導致效率不佳。
使用須知
請注意以下使用 ORDER BY 子句的預期行為:
-
NULL 值會視為「高於」所有其他值。使用預設的遞增排序順序時,NULL 值會排列在最後面。若要變更此行為,請使用 NULLS FIRST 選項。
-
若查詢未包含 ORDER BY 子句,系統傳回的結果集當中就不會有可預測的資料列排列順序。執行相同的查詢兩次,可能會傳回依不同順序排列的結果集。
-
LIMIT 和 OFFSET 選項可在沒有 ORDER BY 子句的情況下使用;不過,若要傳回一致的資料列集,請使用這些選項搭配 ORDER BY。
-
在任何平行系統中,例如 Amazon Redshift,當 ORDER BY 子句無法產生唯一排列順序時,資料列的順序便會不確定。也就是說,如果 ORDER BY 表達式產生重複的值,則這些資料列的傳回順序可能與其他系統不同,也可能隨著每次執行 Amazon Redshift 而有所不同。
-
Amazon Redshift 不支援 ORDER BY 子句中的字符文字。