order-by-clause
The ORDER BY clause specifies an ordering of the rows of the result table.
If a single sort specification (one sort-key with associated direction) is identified, the rows are ordered by the values of that sort specification. If more than one sort specification is identified, the rows are ordered by the values of the first identified sort specification, then by the values of the second identified sort specification, and so on. Each sort-key cannot have a data type of CLOB, DBCLOB, BLOB, XML, distinct type on any of these types, or structured type (SQLSTATE 42907).
A named column in the select list can be identified by a sort-key that is a simple-integer or a simple-column-name. An unnamed column in the select list must be identified by an simple-integer or, in some cases, by a sort-key-expression that matches the expression in the select list (see details of sort-key-expression). A column is unnamed if the AS clause is not specified and it is derived from a constant, an expression with operators, or a function.
Ordering is performed in accordance with comparison rules. If an ORDER BY clause contains decimal floating-point columns, and multiple representations of the same number exist in these columns, the ordering of the multiple representations of the same number is unspecified. The null value is higher than all other values. If the ORDER BY clause does not completely order the rows, rows with duplicate values of all identified columns are displayed in an arbitrary order.
-
simple-column-name
- Usually identifies a column of the result table. In this case, simple-column-name must
be the column name of a named column in the select list.The simple-column-name can also identify a column name of a table, view, or nested table identified in the FROM clause if the query is a subselect. This includes columns defined as implicitly hidden. An error occurs in the following situations:
- If the subselect specifies DISTINCT in the select-clause (SQLSTATE 42822)
- If the subselect produces a grouped result and the simple-column-name is not a grouping-expression (SQLSTATE 42803)
Determining which column is used for ordering the result is described under
Column names in sort keys
in theNotes
section.
simple-integer
- Must be greater than 0 and not greater than the number of columns in the result table (SQLSTATE 42805). The integer n identifies the nth column of the result table. sort-key-expression
- An expression that is not simply a column name or an unsigned
integer constant. The query to which ordering is applied must be a subselect to
use this form of sort-key. The sort-key-expression cannot
include a correlated scalar fullselect (SQLSTATE 42703) or a function
with an external action (SQLSTATE 42845).
Any column-name within a sort-key-expression must conform to the rules described under
Column names in sort keys
in theNotes
section.There are a number of special cases that further restrict the expressions that can be specified.- DISTINCT is specified in the SELECT clause of the subselect (SQLSTATE
42822).
The sort-key-expression must match exactly with an expression in the select list of the subselect (scalar-fullselects are never matched).
- The subselect is grouped (SQLSTATE 42803). The sort-key-expression can:
- be an expression in the select list of the subselect,
- include a grouping-expression from the GROUP BY clause of the subselect
- include an aggregate function, constant or host variable.
- DISTINCT is specified in the SELECT clause of the subselect (SQLSTATE
42822).
- ASC
- Order the rows in ascending order. This is the default.
- DESC
- Order the rows in descending order.
- NULLS FIRST
- When ordering rows in ascending or descending order, list null values before all other values.
- NULLS LAST
- When ordering rows in ascending or descending order, list null values after all other values.
- ORDER OF table-designator
- Specifies
that the same ordering used in table-designator applies
to the result table of the subselect. There must be a table reference
matching table-designator in the FROM clause
of the subselect that specifies this clause (SQLSTATE 42703). The
ordering that is applied is the same as if the columns of the ORDER
BY clause in the nested subselect (or fullselect) were included in
the outer subselect (or fullselect), and these columns were specified
in place of the ORDER OF clause. Note that this form is not allowed in a fullselect (other than the degenerative form of a fullselect). For example, the following is not valid:
The following example is valid:(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
- INPUT SEQUENCE
- Specifies that, for an INSERT statement, the result table will reflect the input order of ordered data rows. INPUT SEQUENCE ordering can only be specified if an INSERT statement is used in a FROM clause (SQLSTATE 428G4). See table-reference. If INPUT SEQUENCE is specified and the input data is not ordered, the INPUT SEQUENCE clause is ignored.
Notes
- Column names in sort keys:
- The column name is qualified.
The query must be a subselect (SQLSTATE 42877). The column name must unambiguously identify a column of some table, view or nested table in the FROM clause of the subselect (SQLSTATE 42702). The value of the column is used to compute the value of the sort specification.
- The column name is unqualified.
- The query is a subselect.
If the column name is identical to the name of more than one column of the result table, the column name must unambiguously identify a column of some table, view or nested table in the FROM clause of the ordering subselect (SQLSTATE 42702). If the column name is identical to one column, that column is used to compute the value of the sort specification. If the column name is not identical to a column of the result table, then it must unambiguously identify a column of some table, view or nested table in the FROM clause of the fullselect in the select-statement (SQLSTATE 42702).
- The query is not a subselect (it includes set operations such
as union, except or intersect).
The column name must not be identical to the name of more than one column of the result table (SQLSTATE 42702). The column name must be identical to exactly one column of the result table (SQLSTATE 42707), and this column is used to compute the value of the sort specification.
- The query is a subselect.
- The column name is qualified.
- Limits: The use of a sort-key-expression or a simple-column-name where the column is not in the select list might result in the addition of the column or expression to the temporary table used for sorting. This might result in reaching the limit of the number of columns in a table or the limit on the size of a row in a table. Exceeding these limits will result in an error if a temporary table is required to perform the sorting operation.