
En este tutorial, aprenderá a usar la cláusula ORDER BY
de SQL Server para ordenar los resultados de una consulta por una o más columnas.
Introducción a la cláusula ORDER BY de SQL Server
Cuando utiliza la instrucción SELECT para consultar datos de una tabla, no se garantiza que el orden de las filas en el conjunto de resultados es el que usted requiere. Significa que SQL Server puede devolver un conjunto de resultados con un orden no especificado de filas.
La única forma de garantizar que las filas estén ordenadas como usted las requiere es usar la cláusula ORDER BY
. A continuación, se ilustra la sintaxis de la cláusula ORDER BY
:
SELECT
select_list
FROM
table_name
ORDER BY
[column_name | expression] [ASC | DESC ]
Primero, debe especificar un nombre de columna o una expresión por la que se va a ordenar el conjunto de resultados de la consulta. Si especifica varias columnas, el conjunto de resultados se ordena por la primera columna y luego ese conjunto de resultados se ordena por la segunda columna, y así sucesivamente.
Las columnas que aparecen en la cláusula ORDER BY
deben corresponder a las columnas de la lista de selección o a las columnas definidas en la tabla que se está consultando con la cláusula FROM
.
En segundo lugar, use ASC
o DESC
para especificar si los valores de la columna especificada deben ordenarse en orden ascendente o descendente.
El ASC
clasifica el resultado del valor más bajo al valor más alto, es decir, ordena de menor a mayor, mientras que el DESC
clasifica el conjunto de resultados del valor más alto al más bajo, es decir, ordena de mayor a menor.
Si no especifica explícitamente ASC
o DESC
, SQL Server usa ASC
como el orden de clasificación predeterminado. Además, SQL Server toma los valores NULL como los valores más bajos o menores.
Al procesar la instrucción SELECT que tiene una cláusula ORDER BY
, esta cláusula es la última cláusula que se procesará.
Ejemplo de la cláusula ORDER BY de SQL Server
Utilizaremos la tabla de clientes de la base de datos de muestra que puedes descargar en este link.
A) Ordenar un conjunto de resultados por una columna en orden ascendente
La siguiente declaración ordena la lista de clientes por nombre, en orden ascendente:
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
first_name;
Resultado:
En este ejemplo, debido a que no especificamos ASC
o DESC
, la cláusula ORDER BY
usó ASC
por default.
B) Ordenar un conjunto de resultados por una columna en orden descendente
La siguiente declaración ordena la lista de clientes por nombre, en orden descendente.
SELECT
firstname,
lastname
FROM
sales.customers
ORDER BY
first_name DESC;
Resultado:
En este ejemplo, debido a que especificamos el DESC
explícitamente, la cláusula ORDER BY
ordenó el conjunto de resultados de la columna first_name en orden descendente.
C) Ordenar un conjunto de resultados por varias columnas
La siguiente declaración recupera el nombre, el apellido y la ciudad de los clientes. Primero ordena la lista de clientes por ciudad y luego por nombre.
SELECT
city,
first_name,
last_name
FROM
sales.customers
ORDER BY
city,
first_name;
Resultado:
D) Ordenar un conjunto de resultados por múltiples columnas y diferentes órdenes
La siguiente declaración ordena a los clientes por ciudad en orden descendente y clasifica el conjunto de resultados ordenados por nombre en orden ascendente.
SELECT
city,
first_name,
last_name
FROM
sales.customers
ORDER BY
city DESC,
first_name ASC;
Resultado:
E) Ordenar un conjunto de resultados por una columna que no está en la lista de selección
Es posible ordenar el conjunto de resultados por una columna que no aparece en la lista de selección. Por ejemplo, la siguiente declaración ordena al cliente por estado, aunque la columna de estado no aparezca en la lista de selección.
SELECT
city,
first_name,
last_name
FROM
sales.customers
ORDER BY
state;
Resultado:
Tenga en cuenta que la columna de estado se define en la tabla de clientes. Si no fuera así, tendría una consulta no válida y se generaría un error.
F) Ordenar un conjunto de resultados por una expresión
La función LEN()
devuelve el número de caracteres de una cadena. La siguiente instrucción usa la función LEN()
en la cláusula ORDER BY
para recuperar una lista de clientes ordenada por la longitud del nombre.
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
LEN(first_name) DESC;
Resultado:
G) Ordenar por posiciones ordinales de columnas
SQL Server le permite ordenar el conjunto de resultados en función de las posiciones ordinales de las columnas que aparecen en la lista de selección.
La siguiente declaración ordena a los clientes por nombre y apellido. Pero en lugar de especificar los nombres de columna explícitamente, usa las posiciones ordinales de las columnas:
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
1,
2;
En este ejemplo, 1 significa la columna first_name y 2 significa la columna last_name.
Usar las posiciones ordinales de las columnas en la cláusula ORDER BY
se considera una mala práctica de programación por un par de razones.
- Primero, las columnas en una tabla no tienen posiciones ordinales y deben ser referenciadas por su nombre.
- En segundo lugar, cuando modifica la lista de selección, puede olvidarse de hacer los cambios correspondientes en la cláusula ORDER BY.
Por lo tanto, es una buena práctica especificar siempre los nombres de columna explícitamente en la cláusula ORDER BY.
En este tutorial, ha aprendido a usar la cláusula ORDER BY de SQL Server para ordenar un conjunto de resultados por columnas en orden ascendente o descendente.