本文介紹ORDER BY子句以及使用方式。
可選的ORDERBY
子句具有以下形式:
ORDER BY expression [ ASC | DESC ] [, ...]
expression
可以是輸出資料行的名稱或序號(SELECT
清單項目),也可以是由輸入列值組成的任意運算式。
ORDER BY
子句使結果行根據指定的運算式進行排序。根據最左邊的運算式,如果兩行相等,則根據下一個運算式對它們進行比較,以此類推。如果根據所有指定的運算式,它們是相等的,則它們將以依賴於實現的順序返回。
序號指的是結果列的序號(從左至右)位置。該特性使得能夠基於沒有唯一名稱的列定義排序。這不是必要的,因為始終可以使用 AS
子句向結果列分配名稱。
也可以在 ORDERBY
子句中使用任意運算式,包括未出現在 SELECT
結果清單中的列。因此,以下語句是有效:
SELECT ename FROM emp ORDER BY empno;
此特性的限制是,應用於 UNION
、INTERSECT
或 MINUS
子句結果的 ORDER BY
子句只能指定輸出資料行名稱或列號,而不能指定運算式。
如果 ORDER BY
運算式是與結果列名稱和輸入列名稱都匹配的簡單名稱,則 ORDER BY
會將其解釋為結果列名稱。這與 GROUP BY
在相同情況下的選擇相反。這種不一致旨在符合 SQL 標準。
使用者可以選擇在 ORDER BY
子句中的任何錶達式之後添加關鍵字 ASC(升序)或 DESC(降序)。如果未指定,則預設使用 ASC。
Null 值的排序高於任何其他值。換句話說,對於升序排序次序,null 值排在末尾,而對於降序排序次序,null 值排在開頭。
字串資料根據初始化資料庫叢集時建立的特定於地區設定的定序順序進行排序。
樣本
以下兩個樣本是根據第二列 (dname) 的內容對各個結果進行排序的相同方法:
SELECT * FROM dept ORDER BY dname;
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
40 | OPERATIONS | BOSTON
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
(4 rows)
SELECT * FROM dept ORDER BY 2;
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
40 | OPERATIONS | BOSTON
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
(4 rows)