|DB2 теперь поддерживает условие ORDER BY в подвыборках и полных |выборках.
|Ниже приведена частичная синтаксическая диаграмма измененной полной |выборки, на которой показано положение условия ORDER BY.
|>>-+-подвыборка--------------+----------------------------------> | +-(полная-выборка)--------+ | '-| условие-на-значения |-' | | .----------------------------------------------------. | V | |>----+------------------------------------------------+-+-------> | '-+-UNION---------+--+-подвыборка--------------+-' | +-UNION ALL-----+ +-(полная-выборка)--------+ | +-EXCEPT--------+ '-| условие-на-значения |-' | +-EXCEPT ALL----+ | +-INTERSECT-----+ | '-INTERSECT ALL-' | |>--+------------------+---------------------------------------->< | '-условие-order-by-' | |
|Полная выборка c условиеv ORDER BY запрещена в: |
|Условие ORDER BY в полной выборке не влияет на порядок строк, возвращаемых |в запросе. Условие ORDER BY влияет на порядок возвращаемых строк, |только если оно задано во внешней полной выборке.
|Ниже приведена полная синтаксическая диаграмма измененной подвыборки, в |которой показано положение условия ORDER BY.
|>>-условие-select--условие-from--+---------------+--------------> | '-условие-where-' | |>--+------------------+--+----------------+---------------------> | '-условие-group-by-' '-условие-having-' | |>--+------------------+---------------------------------------->< | '-условие-order-by-' | |
|Порядок обработки условий подвыборки: |
|Подвыборка с условием 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.
| .-,---------------------------------. | V .-ASC--. | |>>-ORDER BY----+-ключ-сортировки--+------+-----+-+------------->< | | '-DESC-' | | '-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|
|Ниже приведена полная синтаксическая диаграмма измененного оператора |SELECT.
|>>-+-------------------------------------+--полная-выборка------> | | .-,-------------------------. | | | V | | | '-WITH----общее-табличное-выражение-+-' | |>--условие-fetch-first--*--+---------------------+--------------> | +-условие-read-only---+ | | (1) | | '-условие-update------' | |>--*--+----------------------+--*--+--------------+------------>< | '-условие-optimize-for-' '-WITH--+-RR-+-' | +-RS-+ | +-CS-+ | '-UR-' | |
|Примечания:
|Синтаксис
| .-,----------------. | V | |>>-условие-select--INTO----переменная-хоста-+--условие-from-----> | |>--+---------------+--+------------------+----------------------> | '-условие-where-' '-условие-group-by-' | |>--+----------------+--+------------------+--+--------------+-->< | '-условие-having-' '-условие-order-by-' '-WITH--+-RR-+-' | +-RS-+ | +-CS-+ | '-UR-' | |
|На следующей частичной синтаксической диаграмме для функций OLAP показано |измененное условие-window-order.
|условие-window-order | ||--ORDER BY-----------------------------------------------------> | | .-,--------------------------------------------------. | V .-| опция asc |--. | |>----+-выражение-ключа-сортировки--+----------------+-+-+-------| | | '-| опция desc |-' | | '-ORDER OF--обозначение-таблицы------------------' | |опция asc | | .-NULLS LAST--. ||--ASC--+-------------+-----------------------------------------| | '-NULLS FIRST-' | |опция desc | | .-NULLS FIRST-. ||--DESC--+-------------+----------------------------------------| | '-NULLS LAST--' | ||