Notas sobre o Release


43.13 ORDER BY em Sub-seleções

DB2 agora suporta ORDER BY em sub-seleções e seleções completas.

43.13.1 seleção completa

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.

43.13.2 subselect

Segue o diagrama de sintaxe completo da subseleção modificada, mostrando a localização da order-by-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:

  1. Cláusula FROM
  2. Cláusula WHERE
  3. Cláusula GROUP BY
  4. Cláusula HAVING
  5. Cláusula SELECT
  6. Cláusula ORDER BY

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.

43.13.3 order-by-clause

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-'
 
 
ORDER OF table-designator
Especifica que o mesmo ordenamento utilizado em table-designator deve ser aplicado à tabela de resultados da subselect. Deve haver uma referência de tabela idêntica a table-designator na cláusula FROM da subselect que especifica essa cláusula (SQLSTATE 42703). A subselect (ou seleção completa) correspondente ao table-designator especificado deve incluir uma cláusula ORDER BY que é dependente dos dados (SQLSTATE 428FI SQLCODE -20210). O ordenamento que é aplicado é o mesmo como se as colunas da cláusula ORDER BY na subselect (ou seleção completa) embutida fossem incluídas na subselect (ou seleção completa) exterior e essas colunas fossem especificadas em lugar da cláusula ORDER OF. Para obter mais informações sobre designadores de tabela, consulte "Qualificadores de Nome de Coluna para Evitar Ambigüidade" em SQL Reference.

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

43.13.4 select-statement

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:

  1. A update-clause não pode ser especificada se a seleção completa contiver uma order-by-clause.

Instrução SELECT INTO

Sintaxe

                        .-,-------------.
                        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 Funções OLAP (window-order-clause)

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--'
 
 
ORDER BY (sort-key-expression,...)
Define o ordenamento de filas dentro de uma partição que determina o valor da função OLAP ou o significado dos valores ROW na window-aggregation-group-clause (não define o ordenamento do conjunto de resultados de consulta).
sort-key-expression
Uma expressão utilizada na definição do ordenamento das filas dentro de uma partição de janela. Cada nome de coluna referido em uma sort-key-expression deve claramente referir-se a uma coluna do conjunto de resultado da subselect, incluindo a função OLAP (SQLSTATE 42702 ou 42703). O comprimento de cada sort-key-expression não deve superar 255 bytes (SQLSTATE 42907). Uma sort-key-expression não pode incluir uma seleção completa scalar (SQLSTATE 42822) ou qualquer função que não seja determinista ou que tenha uma ação externa (SQLSTATE 42845). Essa cláusula é exigida para as funções RANK e DENSE_RANK (SQLSTATE 42601).
ASC
Utiliza os valores da sort-key-expression em ordem crescente.
DESC
Utiliza os valores da sort-key-expression em ordem decrescente.
NULLS FIRST
O ordenamento das janelas considera valores nulos antes de todos os valores não-nulos na seqüência de ordem.
NULLS LAST
O ordenamento das janelas considera valores nulos depois de todos os valores não-nulos na seqüência de ordem.
ORDER OF table-designator
Especifica que o mesmo ordenamento utilizado em table-designator deve ser aplicado à tabela de resultados da subselect. Deve haver uma referência de tabela idêntica a table-designator na cláusula FROM da subselect que especifica essa cláusula (SQLSTATE 42703). A subselect (ou seleção completa) correspondente ao table-designator especificado deve incluir uma cláusula ORDER BY que é dependente dos dados (SQLSTATE 428FI SQLCODE -20210). O ordenamento que é aplicado é o mesmo como se as colunas da cláusula ORDER BY na subselect (ou seleção completa) embutida fossem incluídas na subselect (ou seleção completa) exterior e essas colunas fossem especificadas em lugar da cláusula ORDER OF. Para obter mais informações sobre designadores de tabela, consulte "Qualificadores de Nome de Coluna para Evitar Ambigüidade" em SQL Reference.


[ Início da Página | Página Anterior | Próxima Página | Índice | Índice Remissivo ]