ORDER BY

La expresión ORDER BY se utiliza para ordenar ascendente o descendente en el motor de base de datos los registros que se obtienen en tablas internas. Esta lección trata de enseñarle cómo implementar esta expresión y todas las consideraciones que debe tener en cuenta al aplicar ORDER BY en las sentencias de lectura SELECT.

  • Sintaxis

… ORDER BY { {PRIMARY KEY}
| { {col1|a1} [ASCENDING|DESCENDING] {col2|a2} [ASCENDING|DESCENDING] …}
| (column_syntax) } … .

  • Efecto

ORDER BY ordena una lista de resultados establecidos por el contenido de la columna especificada. El orden de las filas en el conjunto de resultados se refiere a todas las columnas que no se enumeran después de ORDER BY y puede ser diferente en ejecuciones repetidas de la misma instrucción SELECT.
Las siguientes restricciones se aplican cuando se utiliza la adición ORDER BY con otras adiciones:

  • Si la adición FOR ALL ENTRIES se utiliza en la condición WHERE, ORDER BY sólo se puede utilizar con la adición PRIMARY KEY y todas las columnas de la clave primaria deben aparecer después de SELECT.
  • La adición ORDER BY no se puede utilizar con la adición SINGLE.
  • Si las funciones agregadas se especifican después de SELECT, todas las columnas que se enumeran después de ORDER BY y que no tienen un nombre de columna alternativo para una función de agregación también se deben especificar después de SELECT y después de GROUP BY.
  • Si utiliza un nombre alternativo para ordenar, este nombre debe ser único y no puede tener el mismo nombre que una columna que no tiene nombres alternativos.
  • ORDER BY PRIMARY KEY

Si se especifican todas las columnas (por * después de SELECT), y se especifica una tabla de base de datos después de FROM (en lugar de una vista o join), la adición PRIMARY KEY se puede utilizar para clasificar el conjunto resultante en orden ascendente según el contenido de la clave primaria de esta tabla de base de datos.
La adición PRIMARY KEY no se puede especificar si una vista o un join se especifica estáticamente después de FROM. Si se especifica una vista o un join después de FROM en un dbtab_syntax dinámico, los datos se ordenan por todas las columnas del conjunto resultante.

  • ORDER BY col ASCENDING|DESCENDING

Para cualquier columna especificada después de SELECT, se puede especificar una lista de columnas después en ORDER BY para utilizarlo como criterio de clasificación. Las columnas se pueden especificar directamente usando los nombres de columnas col1 col2 …, o los nombres de columnas alternativos a1 a2 …. Este último es necesario si las columnas especificadas como expresiones de agregado se utilizan como criterios de clasificación. Cuando se accede a varias tablas de base de datos y el nombre de una columna no es único, la columna debe identificarse mediante el selector de columnas ~.
Las adiciones ASCENDING y DESCENDING determinan si las filas se ordenan en orden ascendente o descendente. Si no se especifica ninguna adición, la ordenación se realiza en orden ascendente. La prioridad de clasificación se basa en el orden en el que se especifican los componentes col1 col2 … o a1 a2 ….
Las tablas pool y cluster no se pueden ordenar por todos los tipos de columna. Las columnas especificadas después de ORDER BY no pueden ser del tipo LCHAR, LRAW, STRING o RAWSTRING.

  • Aplicación práctica

En un programa ejecutable realizamos una selección de datos en la tabla ZSPFLISA0001 obteniendo en una tabla interna el contador de las compañías aéreas. Aparte del contador, la tabla interna tendrá las columnas CARRID y CITYFROM. Para el tipo de la tabla interna declaramos un tipo local. También aplicamos HAVING para filtrar en la agrupación obteniendo sólo los registros que tienen la ciudad de salida Frankfurt. Por último, ordenamos los registros que se obtienen de la base de datos de forma ascendente por la columna CARRID.

  1. Implementamos el código fuente.
  2. Ejecutamos el programa.
  • Notas
  • Los datos se ordenan en el sistema de base de datos, una vez que se han completado todas las demás acciones, como la definición de la lista de resultados con WHERE, el cálculo de las funciones agregadas y la agrupación mediante GROUP BY. Sólo la adición de UP TO n ROWS se realiza una vez que se ordena la lista de resultados.
  • Si una columna especificada después de ORDER BY contiene valores nulos en el conjunto de resultados, el orden de clasificación puede depender de la plataforma, ya que los valores nulos se pueden ordenar antes o después de los otros valores por el sistema de base de datos (de acuerdo con el estándar SQL)
  • Por razones de rendimiento, la ordenación sólo debe tener lugar en la base de datos si está soportado por un índice. Esto sólo se garantiza cuando se especifica ORDER BY PRIMARY KEY. Si un índice adecuado no está disponible, el conjunto de resultados se debe ordenar en tiempo de ejecución. Esto debe hacerse utilizando SORT en el servidor de aplicaciones y no utilizando ORDER BY en el sistema de base de datos. Incluso si existe un índice adecuado, ORDER BY col1 col2 … se debe utilizar para grandes cantidades de datos sólo si el orden de los campos de la base de datos col1 col2 … es el mismo que el orden en el índice.
  • Si se asigna un conjunto resultante ordenado a una tabla interna ordenada, la tabla interna se ordena de nuevo de acuerdo con las instrucciones de clasificación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *