DB2 agora suporta ORDER BY em subselects e seleções completas.
O que se segue é um diagrama de sintaxe parcial da seleção completa modificada, exibindo a localização da order-by-clause.
>>-+-subselect---------+----------------------------------------> +-(fullselect)------+ '-| values-clause |-' .----------------------------------------------. V | >----+------------------------------------------+-+-------------> '-+-UNION---------+--+-subselect---------+-' +-UNION ALL-----+ +-(fullselect)------+ +-EXCEPT--------+ '-| values-clause |-' +-EXCEPT ALL----+ +-INTERSECT-----+ '-INTERSECT ALL-' >--+-----------------+----------------------------------------->< '-order-by-clause-'
Uma seleção completa que contém uma cláusula ORDER BY não pode ser especificada em:
Uma cláusula ORDER BY em uma seleção completa não afeta a ordem das filas retornadas por uma consulta. Uma cláusula ORDER BY somente afeta a ordem das filas retornadas se for especificado na seleção completa mais distante.
O que se segue é um diagrama de sintaxe completa da subselect modificada exibindo a localização da order-by-clause e da fetch-first-clause.
>>-select-clause--from-clause--+--------------+-----------------> '-where-clause-' >--+-----------------+--+---------------+-----------------------> '-group-by-clause-' '-having-clause-' >--+-----------------+----------------------------------------->< '-order-by-clause-'
As cláusulas de subselect são processadas na seguinte seqüência:
Uma subselect que contém uma cláusula ORDER BY não pode ser especificada:
Por exemplo, o que se segue não é válido (SQLSTATE 428FJ SQLCODE -20211):
SELECT * FROM T1 ORDER BY C1 UNION SELECT * FROM T2 ORDER BY C1
O seguinte exemplo é válido:
(SELECT * FROM T1 ORDER BY C1) UNION (SELECT * FROM T2 ORDER BY C1)
Uma cláusula ORDER BY em uma subselect não afeta a ordem das filas retornadas por uma consulta. Uma cláusula ORDER BY somente afeta a ordem das filas retornadas se isso for especificado na seleção completa mais distante.
O que se segue é um diagrama de sintaxe completa da order-by-clause modificada.
.-,------------------------------. V .-ASC--. | >>-ORDER BY----+-sort-key--+------+---------+-+---------------->< | '-DESC-' | '-ORDER OF--table-designator-' sort-key |--+-simple-column-name--+--------------------------------------| +-simple-integer------+ '-sort-key-expression-'
Observe que essa forma não é permitida em uma seleção completa (além da forma degenerativa de uma seleção completa). Por exemplo, o que se segue não é válido:
(SELECT C1 FROM T1 ORDER BY C1) UNION SELECT C1 FROM T2 ORDER BY ORDER OF T1
O seguinte exemplo é válido:
SELECT C1 FROM (SELECT C1 FROM T1 UNION SELECT C1 FROM T2 ORDER BY C1 ) AS UTABLE ORDER BY ORDER OF UTABLE
O que se segue é um diagrama de sintaxe completa da select-statement modificada:
>>-+-----------------------------------+--fullselect------------> | .-,-----------------------. | | V | | '-WITH----common-table-expression-+-' >--fetch-first-clause--*--+--------------------+----------------> +-read-only-clause---+ | (1) | '-update-clause------' >--*--+---------------------+--*--+--------------+------------->< '-optimize-for-clause-' '-WITH--+-RR-+-' +-RS-+ +-CS-+ '-UR-'
Notas:
Sintaxe
.-,-------------. V | >>-select-clause--INTO----host-variable-+--from-clause----------> >--+--------------+--+-----------------+--+---------------+-----> '-where-clause-' '-group-by-clause-' '-having-clause-' >--+-----------------+--+--------------+----------------------->< '-order-by-clause-' '-WITH--+-RR-+-' +-RS-+ +-CS-+ '-UR-'
O que se segue é um diagrama de sintaxe parcial para as funções OLAP exibindo a window-order-clause modificada.
window-order-clause .-,-------------------------------------------. V .-| opção asc |--. | |--ORDER BY----+-sort-key-expression--+----------------+-+-+----| | '-| opção desc |-' | '-ORDER OF--table-designator--------------' opção asc .-NULLS LAST--. |--ASC--+-------------+-----------------------------------------| '-NULLS FIRST-' opção desc .-NULLS FIRST-. |--DESC--+-------------+----------------------------------------| '-NULLS LAST--'