オプションの ORDER
BY
句の構文は次のとおりです。
ORDER BY expression [ ASC | DESC ] [, ...]
expression
には SELECT
リストの出力列の名前または序数を指定することができます。 また、入力列の値から形成される任意の式にすることもできます。
ORDER BY
句を指定すると、指定した式に従って結果行がソートされます。 2 つの行が左端の式に基づいて等しい場合、それらはその次の式に従って比較されます。 指定されたすべての式に基づいて等しい場合、それらは実装依存の順序で返されます。
序数は、結果列の序数 (左から右) の位置を指します。 この機能により、一意の名前を持たない列に基づいて並べ替えることができます。 AS
句を使用して結果列に名前を割り当てることができるため、これは必要ありません。
また、ORDER
BY
句の任意の式 (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 も DESC も指定しない場合、ASC が使用されます。
null 値は、他の値よりも高い順に並べ替えられます。 つまり、null 値は昇順の最後にあり、降順の最初にあります。
文字列データは、データベースクラスターの初期化時に作成された特定のリージョンのソートルールセットに基づいてソートされます。
例
次の 2 つの例は、2番目の列 (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)