order-by-clause
ORDER BY子句用于指定结果表中的行排序。
排序子句的语法
按条款订购的描述
包含 ORDER BY 子句的子选择不能在视图的最外层全选择中指定
如果子选择项没有括在括号内,也不是最外层的全选,则 ORDER BY 子句无法指定。
子选择中指定的子句仅影响查询返回的行的顺序,如果子选择是最外层的全选,则嵌套子选择包含一个 ORDER BY 子选择中指定的子句仅影响查询返回的行的顺序,如果子选择是最外层的全选,除非嵌套的子选择包含一个 ORDER BY 子句,且最外层的全选指定保留行顺序(通过使用 ORDER OF 表指定子句 )。
多个 ORDER BY 子选择中可以指定多个子句,每个子句之间用括号隔开。
- 输入序列
- 表示结果表反映了INSERT语句的VALUES子句中指定的行的输入顺序。 输入序列的顺序只能在从子句中指定INSERT语句时指定。
- ORDER OF table-designator
- 指定子选择(或全选择)的结果表应采用与表指定符指定的结果表的行顺序相同的顺序,其中包含 ORDER OF 指定符。 子选择(或全选择)的 FROM 子句中必须有一个表引用,用于指定该子句并匹配表标识符。
对于OLAP规范中的ORDER BY子句, 表名不能指定表函数、集合派生表、具体化视图、具体化嵌套表表达式、别名或同义词。
- sort-key
- 列名、 整数或排序键表达式 ,用于指定用于对子选择的结果行排序的值。
如果识别出一个排序键 ,则按该排序键的值对行进行排序。 如果识别出多个排序键 ,则按第一个排序键的值排序,然后按第二个排序键的值排序,以此类推。 排序键不能是LOB或XML表达式。
结果表可按选择列表中的指定列排序,只需指定一个整数或列名称作为排序键即可。 可以通过指定整数排序键来按选择列表中的未命名列对结果表进行排序,或者在某些情况下,通过与选择列表中的表达式匹配的排序键表达式来对结果表进行排序。
- 列名
- 通常用于标识结果表列的标识符。 在这种情况下, 列名必须是选择列表中已命名列的名称。 如果全选包含集合运算符 ,则列名不能限定。
如果查询是子查询 , 则列名还可以标识在 FROM 子句中标识的表、视图或嵌套表表达式的列名,包括定义为隐式隐藏的列。 子选项不得包含以下任何一项:
- 精选列表中的DISTINCT
- 选择列表中的聚合功能
- GROUP BY 子句
- 整数
- 一个无符号整数,必须大于0且不大于结果表中的列数。 整数n 表示结果表的第n列。
- sort-key-expression
- 表达式不能只是列名或无符号整数常量。 排序查询必须是一个子查询 ,才能使用这种排序键形式。
排序关键字表达式不能包含非确定性表达式或定义为具有外部动作的函数,但RID内置函数和ROW CHANGE表达式除外。 表达式中的任何列名必须符合排序键中列名的规则。 如果排序键表达式包含聚合函数,则该函数的输入参数不得引用选择列表中由聚合函数派生的命名列。
如果子选择列表中使用 DISTINCT,则排序键表达式必须与子选择列表中的表达式匹配。 标量全选永远无法匹配。
如果子选择是分组,则排序键表达式可能出现在也可能不出现在子选择的列表中。 当排序关键字表达式不在选择列表中时,适用以下规则:
- ORDER BY子句中的每个表达式必须满足以下条件之一:
- 使用一个或多个分组表达式
- 使用一个可以明确标识R分组列的列名,或者在聚合函数中指定列名。
- ORDER BY子句中的每个表达式都不得包含标量全选。
- ORDER BY子句中的每个表达式必须满足以下条件之一:
- ASC
- 按升序使用排序键的值。
ASC是默认设置。
- DESC
- 按降序使用排序键的值。
根据SQL语言元素中描述的比较规则进行排序。 空值高于所有其他值。 如果您的订单规格无法确定完整的订单,则具有重复值的最后确定的排序键的行具有任意顺序。 如果您没有指定 ORDER BY,结果表的行将按任意顺序排列。
列访问控制不影响ORDER BY子句的操作。 排序基于原始列值。 然而,在应用列掩码后,最终结果表中的掩码值可能无法反映原始列值的顺序。
排序键中的列名: 排序键中的列名必须符合以下规则:
- 如果列名是限定性的,则查询必须是子查询。 列名必须明确标识子查询 FROM 子句中表、视图或嵌套表表达式的列;其值用于计算排序规范的值。
- 如果列名不明确,且查询是子查询 :
- 如果列名与结果表中的多个列名相同,则列名必须明确地标识排序子查询的 FROM 子句中某个表、视图或嵌套表表达式中的列。
- 如果结果表中的一列名称与列名相同,则使用该列的值来计算排序规范的值。
- 如果列名与结果表中的列名不一致,则必须明确标识子查询的 FROM 子句中表、视图或嵌套表表达式的列。 如果列名与子查询的 FROM 子句中的表、视图或嵌套表表达式中的某列相同,则其值将用于计算排序规范的值。
