martes, 19 de agosto de 2014

Receta T-SQL No. 1-14: Especificación del Orden de los 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 la receta T-SQL anterior aprendimos cómo ordenar los resultados de una búsqueda especificando el nombre de una columna como expresión de orden. En esta receta agregaremos los conceptos de orden ascendente y descendente. Por ejemplo para valores numéricos podemos especificar de menor a mayor, o en sentido contrario, de mayor a menor. Veamos cómo se realiza esta tarea usando el lenguaje de consulta estructurado T-SQL.

1. Problema

Además de ordenar los resultados por grupo de columnas especifíficas, ahora es requisito sine qua non establecer en qué orden (i.e., mayor a menor, o menor a mayor) se deben, valga el pleonasmo, ordenar los resultados para ese conjunto de columnas.

2. Solución

Sobre la cláusula ORDER BY podemos especificar de forma explícita el modo de ordenamiento: ascencente o descente, a través de las palabras claves ASC y DESC, respectivamente.

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.]

De manera predeterminada los resultados se orden ascendentemente (ya sean valores numéricos o alfabéticos). Para hacerlo explícito entonces utilizamos la palabra clave ASC por delante del nombre de la columna. Lo mismo hacemos para el orden inverso.

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, además de que el ID del producto se se orde descendentemente:

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

La ejecución de esta consulta sobre SQL Server 2014 Management Studio genera el siguiente resultado ordenado:
Orden descendente de resultados
Figura 1. Orden descendente de resultados de una búsqueda.

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:
Orden descendente para las columnas Name y EndDate.
Figura 2. Orden descendente para las columnas Name y EndDate.

5. Conclusiones

Aprendimos cómo ordenar las columnas del resultado de una consulta especificando ya sea en orden ascendente (ASC) o descendente (DESC) en conjugación con la cláusula ORDER BY. En la siguiente receta estudiarémos cómo realizar el orden de columnas no enlistadas en la cláusula SELECT.

6. Glosario

  • ASC
  • Ascendente
  • Cláusula
  • Consulta
  • DESC
  • Descendente
  • Orden
  • SQL Server
  • T-SQL

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.