发行说明


|43.13 Subselect 中的 ORDER BY

|DB2 现在支持在 subselect 和 fullselect 中使用 ORDER BY。

|43.13.1 fullselect

|以下是已修改的 fullselect 的部分语法图,它显示了 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 子句的 fullselect 不能以下对象中指定:

|fullselect 中的 ORDER BY 子句不会影响查询返回的行的次序。如果在最外部 fullselect 中指定 |ORDER BY 子句,它只会影响返回的行的次序。

|43.13.2 subselect

|以下是已修改的 subselect 的完整语法图,它显示了 order-by-clause 的位置。

|>>-select-clause--from-clause--+--------------+----------------->
|                               '-where-clause-'
| 
|>--+-----------------+--+---------------+----------------------->
|   '-group-by-clause-'  '-having-clause-'
| 
|>--+-----------------+-----------------------------------------><
|   '-order-by-clause-'
| 
| 

|subselect 的子句是按以下顺序处理的:

  1. |FROM 子句
  2. |WHERE 子句
  3. |GROUP BY 子句
  4. |HAVING 子句
  5. |SELECT 子句
  6. |ORDER BY 子句 |

|不能在下列对象中指定包含 ORDER BY 的 subselect:

|例如,以下语句无效(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)

|subselect 中的 ORDER BY 子句不会影响查询返回的行的次序。如果在最外部 fullselect 中指定 ORDER BY |子句,它只会影响返回的行的次序。

|43.13.3 order-by-clause

|以下是已修改的 order-by-clause 的完整语法图。

|             .-,------------------------------.
|             V             .-ASC--.           |
|>>-ORDER BY----+-sort-key--+------+---------+-+----------------><
|               |           '-DESC-'         |
|               '-ORDER OF--table-designator-'
| 
|sort-key
| 
||--+-simple-column-name--+--------------------------------------|
|   +-simple-integer------+
|   '-sort-key-expression-'
| 
| 
|

|ORDER OF table-designator
|指定在 table-designator 中使用的同一次序应应用于 subselect 的结果表。在指定此子句的 subselect 的 FROM 子句中,必须有与 table-designator 相匹配的表引用(SQLSTATE 42703)。与指定 table-designator |相对应的 subselect(或 fullselect)必须包括依赖于数据的 ORDER BY 子句(SQLSTATE 428FI SQLCODE -20210)。应用的次序就象是外部 subselect(或 fullselect)中包括的嵌套 subselect(或 fullselect)中的 |ORDER BY 子句的列一样,而这些列是代替 ORDER OF 子句指定的。有关表标志符的更多信息,参见 SQL Reference 中的“Column Name Qualifiers to Avoid Ambiguity”。

|注意,此表单在 fullselect 中是不允许的(不同于 fullselect 的退化表单)。 |例如,以下语句无效:

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

|43.13.4 select-statement

|以下是已修改的 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-'
| 
| 

|记录:

  1. |如果 fullselect 包含 order-by-clause,则不能指定 update-clause. |

|SELECT INTO 语句

|语法

|                        .-,-------------.
|                        V               |
|>>-select-clause--INTO----host-variable-+--from-clause---------->
| 
|>--+--------------+--+-----------------+--+---------------+----->
|   '-where-clause-'  '-group-by-clause-'  '-having-clause-'
| 
|>--+-----------------+--+--------------+-----------------------><
|   '-order-by-clause-'  '-WITH--+-RR-+-'
|                                +-RS-+
|                                +-CS-+
|                                '-UR-'
| 
| 

|43.13.5 OLAP 函数(window-order-clause)

|以下是 OLAP 函数的部分语法图,显示已修改的 window-order-clause。

|window-order-clause
| 
|             .-,--------------------------------------------.
|             V                        .-| asc option |--.   |
||--ORDER BY----+-sort-key-expression--+-----------------+-+-+---|
|               |                      '-| desc option |-' |
|               '-ORDER OF--table-designator---------------'
| 
|asc option
| 
|        .-NULLS LAST--.
||--ASC--+-------------+-----------------------------------------|
|        '-NULLS FIRST-'
| 
|desc option
| 
|         .-NULLS FIRST-.
||--DESC--+-------------+----------------------------------------|
|         '-NULLS LAST--'
| 
| 
|

|ORDER BY (sort-key-expression,...)
|定义分区内行的次序,该次序确定 OLAP 函数的值或 window-aggregation-group-clause |中的 ROW 值的意义(它不会定义查询结果集的次序)。

|sort-key-expression
|定义窗口分区内行的次序时使用的表达式。sort-key-expression |中引用的每个列名都必须是毫无歧义地引用 subselect 的结果集中的一列,包括 OLAP 函数(SQLSTATE 42702 或 42703)。每个 sort-key-expression |的长度一定不能超过 255 字节(SQLSTATE 42907)。sort-key-expression |不能包括标量 fullselect(SQLSTATE 42822)或不确定的或具有外部操作的任何函数(SQLSTATE 42845)。此子句是 |RANK 和 DENSE_RANK 函数(SQLSTATE 42601)所必需的。

|ASC
|按升序使用 sort-key-expression 的值。

|DESC
|按降序使用 sort-key-expression 的值。

|NULLS FIRST
|在排序次序中,窗口次序将空值放在所有非空值之前

|NULLS LAST
|在排序次序中,窗口次序将空值放在所有非空值之后

|ORDER OF table-designator
|指定在 table-designator 中使用的同一次序应应用于 subselect 的结果表。在指定此子句的 subselect 的 FROM 子句中,必须有与 table-designator 相匹配的表引用(SQLSTATE 42703)。与指定 table-designator |相对应的 subselect(fullselect)必须包括依赖于数据的 ORDER BY 子句(SQLSTATE 428FI SQLCODE -20210)。应用的次序就象是外部 subselect(或 fullselect)中包括的嵌套 subselect(或 fullselect)中的 |ORDER BY 子句的列一样,而这些列是代替 ORDER OF 子句指定的。有关表标志符的更多信息,参见 SQL Reference 中的“Column Name Qualifiers to Avoid Ambiguity”。 |


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]