ORDER BY 句は、1 つ以上の式に基づいてクエリ結果の行をソートします。この句がない場合、データベースは未指定の順序で行を返します。
構文
ORDER BY expression [ ASC | DESC ] [, ...]expression には、以下を指定できます。
SELECTリスト内の出力列の名前SELECTリスト内の出力列の序数 (左から右への位置)SELECTリストに含まれていない列を含む、入力列の値から形成される任意の式
仕組み
行は、ORDER BY 句の最初の式によってソートされます。その式において 2 つの行が等しい場合は、次の式が適用されます。すべての指定された式で等しい行は、実装に依存した順序で返されます。
ソート方向:各式の後に ASC (昇順) または DESC (降順) を追加します。デフォルトは ASC です。
NULL 値:NULL 値は、昇順の結果では末尾に、降順の結果では先頭に表示されます。
文字列の照合順序:文字列データは、データベースクラスターの初期化時に設定される特定のロケールの照合順序を使用してソートされます。
制限事項
ORDER BYがUNION、INTERSECT、またはMINUS操作の結果に適用される場合、式は出力列名または序数である必要があります。任意の式は許可されません。ORDER BY式が、出力列名と入力列名の両方に一致する単純な名前である場合、ORDER BYはそれを出力列名として扱います。これは、同じ状況におけるGROUP BYの動作とは逆であり、SQL 標準との互換性のために必要です。
例
列名または序数によるソート
以下の 2 つのクエリは、どちらも dname 列で結果をソートします。最初のクエリは列名を使用し、2 番目のクエリはその序数 (2、dname が SELECT リストの 2 番目の列であるため) を使用します。
SELECT * FROM dept ORDER BY dname;SELECT * FROM dept ORDER BY 2;どちらも同じ結果を返します。
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
40 | OPERATIONS | BOSTON
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
(4 rows)SELECT リストにない列によるソート
ORDER BY は、SELECT リストにない列を参照できます。次の文は、従業員名を選択しますが、従業員番号でソートします。
SELECT ename FROM emp ORDER BY empno;