Замечания по выпуску


|42.8 ORDER BY in Subselects (Задание порядка в подвыборках условием ORDER BY)

|DB2 теперь поддерживает условие ORDER BY в подвыборках и полных |выборках.

|42.8.1 полная-выборка

|Ниже приведена частичная синтаксическая диаграмма измененной полной |выборки, на которой показано положение условия ORDER BY.

|>>-+-подвыборка--------------+---------------------------------->
|   +-(полная-выборка)--------+
|   '-| условие-на-значения |-'
| 
|   .----------------------------------------------------.
|   V                                                    |
|>----+------------------------------------------------+-+------->
|     '-+-UNION---------+--+-подвыборка--------------+-'
|       +-UNION ALL-----+  +-(полная-выборка)--------+
|       +-EXCEPT--------+  '-| условие-на-значения |-'
|       +-EXCEPT ALL----+
|       +-INTERSECT-----+
|       '-INTERSECT ALL-'
| 
|>--+------------------+----------------------------------------><
|   '-условие-order-by-'
| 
| 

|Полная выборка c условиеv ORDER BY запрещена в: |

|Условие ORDER BY в полной выборке не влияет на порядок строк, возвращаемых |в запросе. Условие ORDER BY влияет на порядок возвращаемых строк, |только если оно задано во внешней полной выборке.

|42.8.2 подвыборка

|Ниже приведена полная синтаксическая диаграмма измененной подвыборки, на |которой показано положение условия ORDER BY и FETCH FIRST.

|>>-условие-select--условие-from--+---------------+-------------->
|                                 '-условие-where-'
| 
|>--+------------------+--+----------------+--------------------->
|   '-условие-group-by-'  '-условие-having-'
| 
|>--+------------------+----------------------------------------><
|   '-условие-order-by-'
| 
| 

|Порядок обработки условий подвыборки: |

  1. |условие FROM
  2. |условие WHERE
  3. |условие GROUP BY
  4. |условие HAVING
  5. |условие SELECT
  6. |условия 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 влияет на порядок возвращаемых строк, только |если оно задано во внешней полной выборке.

|42.8.3 условие-order-by

|Ниже приведена полная синтаксическая диаграмма измененного условия порядка |ORDER BY.

|             .-,---------------------------------.
|             V                    .-ASC--.       |
|>>-ORDER BY----+-ключ-сортировки--+------+-----+-+-------------><
|               |                  '-DESC-'     |
|               '-ORDER OF--обозначение-таблицы-'
| 
|ключ-сортировки
| 
||--+-простое-имя-столбца--------+-------------------------------|
|   +-простое-целое--------------+
|   '-выражение-ключа-сортировки-'
| 
| 
|

|ORDER OF обозначение-таблицы
|Задает, что в таблице результатов подвыборки должен использоваться тот же |порядок, что и в таблице обозначение-таблицы. Ссылка на |таблицу, соответствующая обозначению-таблицы, должна существовать в |этом операторе подвыборки в условии FROM (SQLSTATE 42703). Подвыборка |(или полная выборка), соответствующая обозначению-таблицы, должна |содержать условие ORDER BY, которое зависит от данных (SQLSTATE 428FI, SQLCODE |-20210). Применяется тот же порядок, как в случае, когда столбцы |условия ORDER BY во вложенной подвыборке (или полной выборке) включены во |внешнюю подвыборку (или полную выборку), и эти столбцы заданы вместо условия |ORDER OF. Дополнительную информацию об обозначениях таблиц смотрите в |разделе "Column Name Qualifiers to Avoid Ambiguity" (Устранение |неоднозначности с помощью спецификаторов имен столбцов) справочника SQL Reference.

|Заметим, что эта форма недопустима в полной выборке (кроме вырожденной |формы полной выборки). Например, недопустимо следующее:

|(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
|

|42.8.4 оператор-select

|Ниже приведена полная синтаксическая диаграмма измененного оператора |SELECT.

|>>-+-------------------------------------+--полная-выборка------>
|   |       .-,-------------------------. |
|   |       V                           | |
|   '-WITH----общее-табличное-выражение-+-'
| 
|>--условие-fetch-first--*--+---------------------+-------------->
|                           +-условие-read-only---+
|                           |                (1)  |
|                           '-условие-update------'
| 
|>--*--+----------------------+--*--+--------------+------------><
|      '-условие-optimize-for-'     '-WITH--+-RR-+-'
|                                           +-RS-+
|                                           +-CS-+
|                                           '-UR-'
| 
| 

|Примечания:

  1. |Нельзя задавать условие-update, если полная выборка содержит |условие-order-by. |

|оператор SELECT INTO

|Внутреннее представление

|                         .-,----------------.
|                         V                  |
|>>-условие-select--INTO----переменная-хоста-+--условие-from----->
| 
|>--+---------------+--+------------------+---------------------->
|   '-условие-where-'  '-условие-group-by-'
| 
|>--+----------------+--+------------------+--+--------------+--><
|   '-условие-having-'  '-условие-order-by-'  '-WITH--+-RR-+-'
|                                                     +-RS-+
|                                                     +-CS-+
|                                                     '-UR-'
| 
| 

|42.8.5 OLAP Functions (window-order-clause) (Функции OLAP, условие-window-order)

|На следующей частичной синтаксической диаграмме для функций OLAP показано |измененное условие-window-order.

|условие-window-order
| 
||--ORDER BY----------------------------------------------------->
| 
|   .-,--------------------------------------------------.
|   V                               .-| опция asc |--.   |
|>----+-выражение-ключа-сортировки--+----------------+-+-+-------|
|     |                             '-| опция desc |-' |
|     '-ORDER OF--обозначение-таблицы------------------'
| 
|опция asc
| 
|        .-NULLS LAST--.
||--ASC--+-------------+-----------------------------------------|
|        '-NULLS FIRST-'
| 
|опция desc
| 
|         .-NULLS FIRST-.
||--DESC--+-------------+----------------------------------------|
|         '-NULLS LAST--'
| 
| 
|

|ORDER BY (выражение-ключа-сортировки,...)
|Задает порядок строк в разделе, который определяет значение функции OLAP |или смысл значений ROW в условии группировки окон |window-aggregation-group-clause (оно не определяет порядок в наборе |результатов запроса).

|выражение-ключа-сортировки
|Выражение, используемое в определении порядка строк в разделе окна. |Каждое имя столбца, на которое делается ссылка в выражении ключа сортировки, |должно однозначно указывать на столбец набора результатов подвыборки, включая |функцию OLAP (SQLSTATE 42702 или 42703). Длина каждого выражения ключа |сортировки не более 255 байт (SQLSTATE 42907). Выражение ключа |сортировки не может включать скалярную полную выборку (SQLSTATE 42822) или |какую-либо функцию, не являющуюся однозначной или предполагающую внешнее |действие (SQLSTATE 42845). Это условие является обязательным для |функций RANK и DENSE_RANK (SQLSTATE 42601).

|ASC
|Использует значения выражения ключа сортировки в порядке |возрастания.

|DESC
|Использует значения выражения ключа сортировки в убывающем порядке.

|NULLS FIRST
|При упорядочении окна пустые значения считаются идущими в порядке |сортировки перед всеми непустыми значениями.

|NULLS LAST
|При упорядочении окна пустые значения считаются идущими в порядке |сортировки после всех непустых значений.

|ORDER OF обозначение-таблицы
|Задает, что в таблице результатов подвыборки должен использоваться тот же |порядок, что и в таблице обозначение-таблицы. Ссылка на |таблицу, соответствующая параметру обозначение-таблицы, должна |существовать в этом операторе подвыборки в условии FROM (SQLSTATE |42703). Подвыборка (или полная выборка), соответствующая параметру |обозначение-таблицы, должна содержать условие ORDER BY, зависящее от |данных (SQLSTATE 428FI SQLCODE -20210). Применяется тот же порядок, как |в случае, когда столбцы условия ORDER BY во вложенной подвыборке (или полной |выборке) включены во внешнюю подвыборку (или полную выборку), и эти столбцы |заданы вместо условия ORDER OF. Дополнительную информацию об |обозначениях таблиц смотрите в разделе "Column Name Qualifiers to Avoid |Ambiguity" (Устранение неоднозначности с помощью спецификаторов имен столбцов) |справочника SQL Reference. |


[ Начало страницы | Страница назад | Страница вперед | Содержание | Индекс ]