miércoles, 13 de agosto de 2014

Receta T-SQL No. 1-13: Ordenar Resultados de una Consulta

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En esta nueva receta T-SQL aprenderemos a ejecutar otras de las operaciones fundamentales a la hora de realizar una consulta: ordenamiento de los resultados. La especificación de un orden en los resultados puede facilitar la interpretación de estos mismos, e inclusive su presentación de aplicaciones consumidoras de datos. Para esto tendemos que usar la cláusula ORDER BY de T-SQL.

1. Problema

Debemos especificar un orden determinado para los resultados generados a partir de una consulta.

2. Solución

Para poder especificar el orden en el que se deben presentar los resultados de una consulta debemos usar la cláusula ORDER BY.

3. Discusión de la Solución

La cláusula ORDER BY [2] ordena los resultados generados por una consulta. Su uso puede aplicarse en situaciones como:
  • Ordenamiento del resultado a partir de un listado de columnas. El orden se establece a partir de la primera columna, luego por la segunda, y así sucesivamente. (La omisión de la cláusula ORDER BY no garantiza un orden específico cada vez que ejecutemos una consulta, es por eso que debe ser explícita su inclusión al final de la consulta.)
  • Generación de un límite de filas en un orden específico.
Sintaxis T-SQL [2]:

ORDER BY order_by_expression
    [ ASC | DESC ] 

Descripción puntual:
  • order_by_expression: Grupo de columnas a partir de las cuales se realizará el orden de los resultados de la consulta. Los nombres de las columnas deben ser únicos y el tamaño total de las columnas no debe exceder los 8060 bytes.
  • ASC | DESC (opcional): Los valores de las columnas son ordenados ya sea en orden ascendente (ASC) o descedente (DESC).
[Nota: Esta descripción sintáctica de la cláusula ORDER BY comprende su uso básico, en [2] podrán encontrar su versión extendida.]


Respecto a la especificación de las columnas en el listado de ordenamiento (order_by_expression) también es posible incluir el número (o índice) que ocupa una columna en la cláusula SELECT, sin embargo, en [2] advierten que recurrir a este método comprende una mala práctica a razón de que se podría cambiar la posición de la columna o agregar unas nuevas en futuros mantenimientos de la consulta, y evidentemente esto afectaría el ordenamiento del resultado.

Veamos un ejemplo básico de uso de la cláusula ORDER BY:

Ordenemos por el ID de producto todos aquellos productos que su nombre empiece por la cadena de caracteres Lock Washer:

SELECT ProductoID AS 'ID Producto', Name AS 'Nombre'
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;


La ejecución de esta consulta sobre SQL Server 2014 Management Studio genera el siguiente resultado ordenado:
Uso básico de ORDER BY
Figura 1. Uso básico de la clásula ORDER BY.

Notamos que en este resultado los valores de la columna ID Producto mantienen un orden ascendente; esto se debe a que el tipo de orden por defecto es ASC.


[Nota: En la próxima receta trataremos más a fondo el uso de las cláusulas ASC y DESC.]

4. Práctica: Código T-SQL

Recurramos a un ejemplo más complejo para afianzar nuestro conocimiento sobre el uso de la cláusula ORDER BY:

SELECT p.Name AS 'Nombre Producto',
h.EndDate AS 'Fecha',
h.ListPrice AS 'Precio de Lista'
FROM Production.Product AS p
INNER JOIN Production.ProductListPriceHistory AS h
ON p.ProductID = h.ProductID
ORDER BY p.Name DESC,
h.EndDate DESC;

En esta consulta queremos mostrar todos aquellos registros de las tablas Product y ProductListPriceHistory que coincidan con el ID de producto (p.ProductID = h.ProductID). (Más adelante comprenderemos el uso de INNER JOIN.) El resultado de esta consulta estará ordenado de forma descedente por el nombre del producto (p.Name), y por la fecha del historial de precios de producto (h.EndDate).

Probemos ejecutando esta consulta para obtener el resultado:
Uso de ORDER BY para ordenamiento historial de productos
Figura 2. Uso de ORDER BY para ordenamiento historial de productos.

5. Conclusiones

Ordenar los resultados de una consulta resulta simple y directo a través del uso de la cláusula ORDER BY. Comprendimos que a través de esta construcción de T-SQL podemos explicitar el orden en que deben mostrarse los resultados a partir de un listado de columnas (nombre o índice, aunque preferible por su nombre debido a futuros mantenimientos de la consulta). También quedó evidenciado que el modo de ordenamiento ya se de valores numéricos o alfabéticos es por defecto ascendente.

6. Glosario

  • Cláusula
  • Columna
  • Consulta
  • Orden

7. Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: ORDER BY Clause (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms188385.aspx


S

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.