| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 7. 查詢 | Fast Forward | Next |
在一個查詢生成一個輸出資料表之後(在處理完選擇列資料表之後), 您還可以對它進行排序。如果沒有選擇排序,那麼行將以未聲明的順序返回。 這時候的實際順序將取決於掃瞄和連接規劃類型和在磁盤上的順序,但是肯定不能依賴這些東西。 一定的順序只能在明確地使用了排序步驟之後才能保證。
ORDER BY子句聲明了排序順序
SELECT select_list FROM table_expression ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...]
column1,等指向選擇列資料表: 它可以是一個列的名字(可以是明確的列標籤也可以是預設名字,像 Section 7.3.2 裡解釋的那樣) 或者是一個列的編號。一些例子:
SELECT a, b FROM table1 ORDER BY a; SELECT a + b AS sum, c FROM table1 ORDER BY sum; SELECT a, sum(b) FROM table1 GROUP BY a ORDER BY 1;
作為對標準 SQL 的擴展,PostgreSQL 還允許對任意資料表達式進行排序:
SELECT a, b FROM table1 ORDER BY a + b;
還允許引用 FROM 子句中的字串名,但是沒有出現在選擇列資料表中的字串名字:
SELECT a FROM table1 ORDER BY b;
但是這個特性在涉及UNION,INTERSECT,或 EXCEPT的查詢中是不能用的,而且也不可移植到其它 DBMS。
聲明的每個字串都可以跟著一個可選的ASC或DESC 以設置排序方向。 預設是ASC。升序先輸出小的數值,這裡的"小"是以 < 操作符的角度定義的。類似的是, 降序是以 > 操作符來判斷的。
如果聲明了多於一個排序列,那麼在前面的排序字串排序相等的情況下使用後面的排序項做進一步排序。