|DB2 は、副選択および全選択の ORDER BY をサポートするようになりました。
|以下に、order-by-clause の位置を示す、変更後の全選択の構文図の一部を示します。
|>>-+-subselect---------+----------------------------------------> | +-(fullselect)------+ | '-| values-clause |-' | | .----------------------------------------------. | V | |>----+------------------------------------------+-+-------------> | '-+-UNION---------+--+-subselect---------+-' | +-UNION ALL-----+ +-(fullselect)------+ | +-EXCEPT--------+ '-| values-clause |-' | +-EXCEPT ALL----+ | +-INTERSECT-----+ | '-INTERSECT ALL-' | |>--+-----------------+----------------------------------------->< | '-order-by-clause-' | |
|ORDER BY 文節を含む全選択は、以下では指定できません。 |
|全選択内の ORDER BY 文節は、照会から戻される行の順序には |影響しません。ORDER BY 文節は、最外部全選択で指定された場合のみ、 |戻された行の順序に影響します。
|以下に、order-by-clause の位置を示す、 |変更後の副選択の完全な構文図を示します。
|>>-select-clause--from-clause--+--------------+-----------------> | '-where-clause-' | |>--+-----------------+--+---------------+-----------------------> | '-group-by-clause-' '-having-clause-' | |>--+-----------------+----------------------------------------->< | '-order-by-clause-' | |
|副選択の文節は、以下の順序で処理されます。 |
|ORDER BY 文節を含む副選択は、以下では指定できません。 |
|たとえば、以下の構文は無効です (SQLSTATE 428FJ SQLCODE -20211)。
|SELECT * FROM T1 | ORDER BY C1 |UNION |SELECT * FROM T2 | ORDER BY C1
|以下の例が 有効 |です。
|(SELECT * FROM T1 | ORDER BY C1) |UNION |(SELECT * FROM T2 | ORDER BY C1)
|副選択内の ORDER BY 文節は、照会から戻される行の順序には |影響しません。ORDER BY 文節は、最外部全選択で指定された場合のみ、 |戻された行の順序に影響します。
|以下に、変更後の order-by-clause の完全な構文図を示します。
| .-,------------------------------. | V .-ASC--. | |>>-ORDER BY----+-sort-key--+------+---------+-+---------------->< | | '-DESC-' | | '-ORDER OF--table-designator-' | |sort-key | ||--+-simple-column-name--+--------------------------------------| | +-simple-integer------+ | '-sort-key-expression-' | ||
|このフォームは、全選択では使用できないことに注意してください |(全選択の古いフォームを除く)。 |たとえば、以下の例は無効です。
|(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|
|以下に、変更後の select-statement の完全な構文図を示します。
|>>-+-----------------------------------+--fullselect------------> | | .-,-----------------------. | | | V | | | '-WITH----common-table-expression-+-' | |>--fetch-first-clause--*--+--------------------+----------------> | +-read-only-clause---+ | | (1) | | '-update-clause------' | |>--*--+---------------------+--*--+--------------+------------->< | '-optimize-for-clause-' '-WITH--+-RR-+-' | +-RS-+ | +-CS-+ | '-UR-' | |
|注:
|構文
| .-,-------------. | V | |>>-select-clause--INTO----host-variable-+--from-clause----------> | |>--+--------------+--+-----------------+--+---------------+-----> | '-where-clause-' '-group-by-clause-' '-having-clause-' | |>--+-----------------+--+--------------+----------------------->< | '-order-by-clause-' '-WITH--+-RR-+-' | +-RS-+ | +-CS-+ | '-UR-' | |
|以下に、変更後の window-order-clause を示す、OLAP 関数の構文図の一部を示します。
|window-order-clause | ||--ORDER BY-----------------------------------------------------> | | .-,------------------------------------------------. | V .-| asc オプション |--. | |>----+-sort-key-expression--+---------------------+-+-+---------| | | '-| desc オプション |-' | | '-ORDER OF--table-designator-------------------' | |asc オプション | | .-NULLS LAST--. ||--ASC--+-------------+-----------------------------------------| | '-NULLS FIRST-' | |desc オプション | | .-NULLS FIRST-. ||--DESC--+-------------+----------------------------------------| | '-NULLS LAST--' | ||