order-by-clause

ORDER BY 節は、結果表の行の順序を指定します。

Read syntax diagramSkip visual syntax diagramORDER BY,sort-keyASCNULLS LASTNULLS FIRSTDESCNULLS FIRSTNULLS LASTORDER OFtable-designatorINPUT SEQUENCE
sort-key
Read syntax diagramSkip visual syntax diagramsimple-column-namesimple-integersort-key-expression

単一のソート指定 (方向が関連した 1 つの sort-key (ソート・キー)) が指定された場合、 行は、そのソート指定の値によって順序付けられます。 複数のソート指定を指定すると、行は、最初に指定されたソート指定の値によってソートされ、次に 2 番目に指定されたソート指定の値によってソートされ、以降同様にソートされます。 それぞれの sort-key のデータ・タイプは、CLOB、DBCLOB、BLOB、XML にすることはできません。また、これらのタイプの特殊タイプや構造化タイプにすることもできません (SQLSTATE 42907)。

選択リストに指定された列は、 simple-integer または simple-column-name であるソート・キー によって 識別することができます。 選択リストに指定されていない列は、simple-integer、 もしくは場合によっては、 選択リストの式と一致する sort-key-expression (sort-key-expression の詳細を参照) によって 識別されなければなりません。 列は、AS 節の指定がなく、しかもその列が定数、 演算子の入った式、または関数から派生した列の場合には無名です。

順序付けは、比較規則に従って行われます。 ORDER BY 節に 10 進浮動小数点列が含まれ、同じ数値の複数の表記がこれらの列に存在する場合、同じ数値の複数の表記の順序は指定されません。 NULL 値は、他のどのような値よりも高位として扱われます。 ORDER BY 節で行が完全に順序付けされない場合、 指定されたすべての列の値が重複する複数の行は、任意の順序で表示されます。

単純列名 (simple-column-name)
通常、結果表の列を識別します。 この場合、simple-column-name (単純列名) は、 選択リストに指定された列の列名でなければなりません。
また、照会が副選択である場合、simple-column-name として、 FROM 節で識別される表、ビュー、またはネストされた表の列名も指定することができます。 これには暗黙的に隠された列として定義された列も含まれます。 以下の状況では、エラーが生じます。
  • 副選択で SELECT 節に DISTINCT を指定する場合 (SQLSTATE 42822)
  • 副選択でグループ化された結果を生成する場合に、 simple-column-namegrouping-expression ではない場合 (SQLSTATE 42803)

結果の順序付けに使用する列の決定については、 「注」 セクションの「 ソート・キーの列名 」で説明されています。

単純整数 (simple-integer)
0 より大きく、結果表の列の数以下でなければなりません (SQLSTATE 42805)。 整数 n は、結果表の n 番目の列を指定します。
ソート・キー式
単なる列名または符号なし整数定数ではない式。 順序付けが適用される照会は、 この形式のソート・キーを使用するためには副選択 でなければなりません。 sort-key-expression には、相関スカラー全選択 (SQLSTATE 42703)、または外部処理を伴う関数 (SQLSTATE 42845) を組み入れることはできません。

ソート・キー式 内の 列名 は、 注意事項 セクションの ソート・キーの列名 で説明されている規則に準拠している必要があります。

指定可能な式にさらに制約が加わる特殊な場合があります。
  • DISTINCT が、副選択の SELECT 節に指定されている (SQLSTATE 42822)。

    ソート・キー式は、副選択の選択リスト内の式と完全に一致しなければなりません (スカラー全選択は一致しません)。

  • 副選択がグループ化されている (SQLSTATE 42803)。
    ソート・キー式は以下が可能です。
    • 副選択の選択リスト内の式である。
    • 副選択の GROUP BY 節の grouping-expression が組み込まれる。
    • 集約関数、定数、またはホスト変数が組み込まれる。
ASC
行を昇順に並べ替えます。 これがデフォルトです。
DESC
行を降順に並べ替えます。
NULLS FIRST
行を昇順または降順に並べ替えるとき、NULL 値を他のすべての値より前にリストします。
NULLS LAST
行を昇順または降順に並べ替えるとき、NULL 値を他のすべての値より後にリストします。
ORDER OF 表指定子
表指定子 で使用されているのと同じ順序付けを、副選択の結果表にも適用することを指定します。 この節を指定する副選択の FROM 節内には、表指定子 に一致する表参照がなければなりません (SQLSTATE 42703)。 適用される順序は、ネストされた副選択 (または全選択) 内の ORDER BY 節の列が外部副選択 (または全選択) に入っていた場合、およびそれらの列が ORDER OF 節の代わりに指定された場合と同じです。
この形式は、 全選択 (全選択の変性形式を除く) では許可されていないので注意してください。 例えば、以下は無効です。
(SELECT C1 FROM T1
   ORDER BY C1)
UNION
SELECT C1 FROM T2
   ORDER BY ORDER OF T1
以下の例は有効です
SELECT C1 FROM
   (SELECT C1 FROM T1
      UNION
    SELECT C1 FROM T2
    ORDER BY C1 ) AS UTABLE
ORDER BY ORDER OF UTABLE
INPUT SEQUENCE
INSERT ステートメントの場合に、 結果表が配列済みデータ行の入力配列を反映していることを示します。 INPUT SEQUENCE 配列は、 FROM 節で INSERT ステートメントが指定されている場合にのみ使用できます (SQLSTATE 428G4)。 表参照 (table-reference)を参照。 INPUT SEQUENCE が指定されていても、入力データが配列されていない場合は、 INPUT SEQUENCE 節は無視されます。

  • ソート・キーの列名
    • 列名が修飾されている場合

      照会は副選択 でなければなりません (SQLSTATE 42877)。 列名は、副選択の FROM 節の表、ビュー、 またはネストされた表の列を明確に識別する必要があります (SQLSTATE 42702)。 列の値は、ソート指定の値を計算するのに使用されます。

    • 列名が無修飾の場合
      • 照会が副選択である場合

        列名が結果表の複数の列の名前と同一である場合、 この列名は、順序付け副選択の FROM 節内の表、ビュー、 またはネストされた表の列を明確に識別する必要があります (SQLSTATE 42702)。 列名が 1 つの列と同一である場合、その列は、ソート指定の値を計算するのに使用されます。 列名が結果表の列と同一でない場合、 この列名は、選択ステートメントの全選択の FROM 節の表、ビュー、 またはネストされた表の列を明確に識別する必要があります (SQLSTATE 42702)。

      • 照会が、副選択ではない場合 (UNION、EXCEPT、または INTERSECT などの SET 演算が組み入れられている)

        列名は、結果表の複数の列の名前と同一にすることはできません (SQLSTATE 42702)。 列名は、結果表のちょうど 1 つの列と同一でなければなりません (SQLSTATE 42707)。 この列は、ソート指定の値を計算するのに使用されます。

  • 制限: ソート・キー式 またはその列が選択リストにない単純列名 を使用すると、 ソートに使用される一時表にその列または式が追加される場合があります。 これにより、表の列の数の制限、または表の行のサイズの制限に到達する場合があります。 ソート操作を行うのに一時表が必要になる場合、このような制限を超えると、エラーが生じます。