W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在一個查詢生成一個輸出表之后(在處理完選擇列表之后),還可以選擇性地對它進行排序。如果沒有選擇排序,那么行將以未指定的順序返回。 這時候的實際順序?qū)⑷Q于掃描和連接計劃類型以及行在磁盤上的順序,但是肯定不能依賴這些東西。一種特定的順序只能在顯式地選擇了排序步驟之后才能被保證。
ORDER BY
子句指定了排序順序:
SELECT select_list
FROM table_expression
ORDER BY sort_expression1
[ASC | DESC] [NULLS { FIRST | LAST }]
[, sort_expression2
[ASC | DESC] [NULLS { FIRST | LAST }] ...]
排序表達式可以是任何在查詢的選擇列表中合法的表達式。一個例子是:
SELECT a, b FROM table1 ORDER BY a + b, c;
當多于一個表達式被指定,后面的值將被用于排序那些在前面值上相等的行。每一個表達式后可以選擇性地放置一個ASC
或DESC
關鍵詞來設置排序方向為升序或降序。ASC
順序是默認值。升序會把較小的值放在前面,而“較小”則由<
操作符定義。相似地,降序則由>
操作符定義。
NULLS FIRST
和NULLS LAST
選項將可以被用來決定在排序順序中,空值是出現(xiàn)在非空值之前或者出現(xiàn)在非空值之后。默認情況下,排序時空值被認為比任何非空值都要大,即NULLS FIRST
是DESC
順序的默認值,而不是NULLS LAST
的默認值。
注意順序選項是對每一個排序列獨立考慮的。例如ORDER BY x, y DESC
表示ORDER BY x ASC, y DESC
,而和ORDER BY x DESC, y DESC
不同。
一個sort_expression
也可以是列標簽或者一個輸出列的編號,如:
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;
兩者都根據(jù)第一個輸出列排序。注意一個輸出列的名字必須孤立,即它不能被用在一個表達式中 — 例如,這是不正確的:
SELECT a + b AS sum, c FROM table1 ORDER BY sum + c; -- 錯誤
該限制是為了減少混淆。如果一個ORDER BY
項是一個單一名字并且匹配一個輸出列名或者一個表表達式的列,仍然會出現(xiàn)混淆。在這種情況中輸出列將被使用。只有在你使用AS
來重命名一個輸出列來匹配某些其他表列的名字時,這才會導致混淆。
ORDER BY
可以被應用于UNION
、INTERSECT
或EXCEPT
組合的結(jié)果,但是在這種情況中它只被允許根據(jù)輸出列名或編號排序,而不能根據(jù)表達式排序。
事實上,PostgreSQL為表達式的數(shù)據(jù)類型使用默認B-tree操作符類來決定ASC
和DESC
的排序順序。照慣例,數(shù)據(jù)類型將被建立,這樣<
和>
操作符負責這個排序順序,但是一個用戶定義的數(shù)據(jù)類型的設計者可以選擇做些不同的設置。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: