Notas del release


42.8 ORDER BY en subselecciones

Ahora DB2 da soporte a ORDER BY en subselecciones y selecciones completas.

42.8.1 Selección completa

A continuación, aparece un diagrama de sintaxis parcial de la selección completa modificada que muestra la ubicación de la cláusula order by.

>>-+-subselección---------+------------------------------------->
   +-(selección-completa)-+
   '-| cláusula-values |--'
 
   .-------------------------------------------------.
   V                                                 |
>----+---------------------------------------------+-+---------->
     '-+-UNION---------+--+-subselección---------+-'
       +-UNION ALL-----+  +-(selección-completa)-+
       +-EXCEPT--------+  '-| cláusula-values |--'
       +-EXCEPT ALL----+
       +-INTERSECT-----+
       '-INTERSECT ALL-'
 
>--+-------------------+---------------------------------------><
   '-cláusula-order-by-'
 
 

Una selección completa que contenga una cláusula ORDER BY no puede especificarse en:

Una cláusula ORDER BY de una selección completa no afecta al orden de las filas devueltas por una consulta. Una cláusula ORDER BY sólo afecta al orden de las filas devueltas si se especifica en la selección completa más externa.

42.8.2 Subselección

A continuación, aparece el diagrama de sintaxis completo de la subselección modificada que muestra la ubicación de la cláusula order by y la cláusula fetch first.

>>-cláusula-select--cláusula-from--+----------------+----------->
                                   '-cláusula-where-'
 
>--+-------------------+--+-----------------+------------------->
   '-cláusula-group-by-'  '-cláusula-having-'
 
>--+-------------------+---------------------------------------><
   '-cláusula-order-by-'
 
 

Las cláusulas de la subselección se procesan en la secuencia siguiente:

  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

Una subselección que contenga una cláusula ORDER BY no puede especificarse en los casos siguientes:

Por ejemplo, no es válido especificar lo siguiente (SQLSTATE 428FJ SQLCODE -20211):

SELECT * FROM T1
   ORDER BY C1
UNION
SELECT * FROM T2
   ORDER BY C1

El ejemplo siguiente sí es válido:

(SELECT * FROM T1
   ORDER BY C1)
UNION
(SELECT * FROM T2
   ORDER BY C1)

Una cláusula ORDER BY de una subselección no afecta al orden de las filas devueltas por una consulta. Una cláusula ORDER BY sólo afecta al orden de las filas devueltas si se especifica en la selección completa más externa.

42.8.3 Cláusula order by

A continuación, aparece el diagrama de sintaxis completo de la cláusula order by modificada.

             .-,---------------------------------.
             V                        .-ASC--.   |
>>-ORDER BY----+-clave-clasificación--+------+-+-+-------------><
               |                      '-DESC-' |
               '-ORDER OF--indicador-tabla-----'
 
clave-clasificación
 
|--+-nombre-columna-simple---------+----------------------------|
   +-entero-simple-----------------+
   '-expresión-clave-clasificación-'
 
 

ORDER OF indicador-tabla
Especifica que debe aplicarse a la tabla de resultados de la subselección la misma ordenación utilizada en indicador-tabla. Debe haber una referencia de tabla que coincida con indicador-tabla en la cláusula FROM de la subselección que especifica esta cláusula (SQLSTATE 42703). La subselección (o selección completa) correspondiente al indicador-tabla especificado debe incluir una cláusula ORDER BY que sea dependiente de los datos (SQLSTATE 428FI SQLCODE -20210). La ordenación que se aplica es la misma que habría si las columnas de la cláusula ORDER BY de la subselección anidada (o selección completa) estuvieran incluidas en la subselección externa (o selección completa) y se especificaran tales columnas en lugar de la cláusula ORDER OF. Para conseguir más información sobre los indicadores de tabla, consulte "Calificadores de nombres de columna para evitar la ambigüedad" en el manual Consulta de SQL.

Tenga en cuenta que este formato no está permitido en una selección completa (caso distinto del formato degenerativo de una selección completa). Por ejemplo, no es válido lo siguiente:

(SELECT C1 FROM T1
   ORDER BY C1)
UNION
SELECT C1 FROM T2
   ORDER BY ORDER OF T1

El ejemplo siguiente sí es válido:

SELECT C1 FROM
   (SELECT C1 FROM T1
      UNION
    SELECT C1 FROM T2
    ORDER BY C1 ) AS UTABLE
ORDER BY ORDER OF UTABLE

42.8.4 Sentencia select

A continuación, aparece el diagrama de sintaxis completo de la sentencia select modificada.

>>-+---------------------------------+--selección-completa------>
   |       .-,---------------------. |
   |       V                       | |
   '-WITH----expresión-tabla-común-+-'
 
>--cláusula-fetch-first--*--+----------------------+------------>
                            +-cláusula-read-only---+
                            |                 (1)  |
                            '-cláusula-update------'
 
>--*--+-----------------------+--*--+--------------+-----------><
      '-cláusula-optimize-for-'     '-WITH--+-RR-+-'
                                            +-RS-+
                                            +-CS-+
                                            '-UR-'
 
 

Notas:

  1. La cláusula update no puede especificarse si la selección completa contiene una cláusula order by..

Sentencia SELECT INTO

Sintaxis

                          .-,---------------------------.
                          V                             |
>>-cláusula-select--INTO----variable-lenguaje-principal-+------->
 
>--cláusula-from--+----------------+--+-------------------+----->
                  '-cláusula-where-'  '-cláusula-group-by-'
 
>--+-----------------+--+-------------------+------------------->
   '-cláusula-having-'  '-cláusula-order-by-'
 
>--+--------------+--------------------------------------------><
   '-WITH--+-RR-+-'
           +-RS-+
           +-CS-+
           '-UR-'
 
 

42.8.5 Funciones de OLAP (cláusula window order)

A continuación, aparece un diagrama de sintaxis parcial para las funciones de OLAP donde se muestra la cláusula window order modificada.

cláusula window order
 
|--ORDER BY----------------------------------------------------->
 
   .-,------------------------------------------------------.
   V                                  .-| opción asc |--.   |
>----+-expresión-clave-clasificación--+-----------------+-+-+---|
     |                                '-| opción desc |-' |
     '-ORDER OF--indicador-tabla--------------------------'
 
opción asc
 
        .-NULLS LAST--.
|--ASC--+-------------+-----------------------------------------|
        '-NULLS FIRST-'
 
opción desc
 
         .-NULLS FIRST-.
|--DESC--+-------------+----------------------------------------|
         '-NULLS LAST--'
 
 

ORDER BY (expresión-clave-clasificación,...)
Define la ordenación de las filas de una partición que determina el valor de la función de OLAP o el significado de los valores ROW en la cláusula window aggregation group (no define la ordenación del conjunto de resultados de consulta).

expresión-clave-clasificación
Una expresión utilizada para definir la ordenación de las filas de una partición de ventana. Cada nombre de columna referido en una expresión-clave-clasificación debe hacer referencia sin ambigüedad a una columna del conjunto de resultados de la subselección, incluida la función de OLAP (SQLSTATE 42702 o 42703). La longitud de cada expresión-clave-clasificación no debe superar los 255 bytes (SQLSTATE 42907). Una expresión-clave-clasificación no puede incluir una selección completa escalar (SQLSTATE 42822) ni ninguna función que no sea determinista o que tenga una acción externa (SQLSTATE 42845). Esta cláusula es necesaria para las funciones RANK y DENSE_RANK (SQLSTATE 42601).

ASC
Utiliza los valores de la expresión-clave-clasificación en orden ascendente.

DESC
Utiliza los valores de la expresión-clave-clasificación en orden descendente.

NULLS FIRST
La ordenación de ventana tiene en cuenta los valores nulos antes que todos los valores no nulos en el orden clasificatorio.

NULLS LAST
La ordenación de ventana tiene en cuenta los valores nulos después de todos los valores no nulos en el orden clasificatorio.

ORDER OF indicador-tabla
Especifica que debe aplicarse a la tabla de resultados de la subselección la misma ordenación utilizada en indicador-tabla. Debe haber una referencia de tabla que coincida con indicador-tabla en la cláusula FROM de la subselección que especifica esta cláusula (SQLSTATE 42703). La subselección (o selección completa) correspondiente al indicador-tabla especificado debe incluir una cláusula ORDER BY que sea dependiente de los datos (SQLSTATE 428FI SQLCODE -20210). La ordenación que se aplica es la misma que habría si las columnas de la cláusula ORDER BY de la subselección anidada (o selección completa) estuvieran incluidas en la subselección externa (o selección completa) y se especificaran tales columnas en lugar de la cláusula ORDER OF. Para conseguir más información sobre los indicadores de tabla, consulte "Calificadores de nombres de columna para evitar la ambigüedad" en el manual Consulta de SQL.


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]