La cláusula SQL ORDER BY en el lenguaje de consulta estructurado (SQL) se usa para organizar el conjunto de resultados obtenido por una consulta SELECT en forma ascendente o descendente de acuerdo con una o más columnas. Una vez que haya escrito una consulta, naturalmente querrá reordenar los resultados.
Sintaxis de SQL ORDER BY
Para ordenar los resultados de una consulta, utilice la cláusula SQL ORDER BY. Se utiliza después de la cláusula FROM y es donde se especifican las columnas o la expresión que se utilizarán para ordenar los datos.
La forma general del comando es:
SELECT column1, column2, column3
FROM table1
ORDER BY column1, column4
Ejemplo de la clausula order by
Entonces, si quisieras ordenar a las personas por ciudad, podrías indicar
SELECT ID, Nombre, Apellido,
Correoelectrónico, AddressLine,
Ciudad, Cargo
FROM Empleado
order by Ciudad
Además, puede especificar la dirección a ordenar. A menos que se especifique, todos los tipos están en orden ascendente (de menor a mayor) y se pueden especificar explícitamente utilizando la palabra clave ASC
SELECT ID,Nombre,Apellido,Correoelectrónico,
AddressLine,Ciudad,Cargo
FROM Empleado order by Ciudad Asc
SQL ORDER BY POR DOS COLUMNAS
También puede ordenar por más de una columna. Simplemente separe las columnas que desea ordenar con una coma. Si querías ordenar Persona por Apellido y Nombre.
SELECT ID,
Nombre,
Apellido,
Correoelectrónico,
AddressLine,
Ciudad,
Cargo
FROM Empleado
order by Ciudad,cargo
Los resultados se ordenan en orden ascendente (de la A a la Z). Además, al especificar dos o más columnas de ordenación, los valores de la segunda columna se ordenan dentro de la primera.
SQL ORDER BY descendente (DESC)
Utilice la palabra clave DESC dentro de la cláusula SQL order by para lograr ordenar el resultado SQL de forma descendente. Hacerlo es fácil. Simplemente agregue DESC, la palabra clave SQL DESC especifica un orden descendente para una columna dentro de la cláusula SQL ORDER BY. Los valores se ordenan en orden Z a A.
La siguiente instrucción ordena el campo ciudad en orden descendente. Dado que la anotación se especifica para Cargo, se ordenan en orden ascendente dentro de Ciudad.
SELECT ID, Nombre, Apellido,
Correoelectrónico, AddressLine, Ciudad,Cargo
FROM Empleado order by Ciudad desc, cargo
Tenga en cuenta que el orden de clasificación de la cláusula orden by de forma predeterminada es ascendente.
Observe cómo agregué la palabra clave ASC a la columna Cargo. La palabra clave SQL ASC especifica un criterio de ordenación ascendente para una columna dentro de la cláusula ORDER BY. Esto significa que los valores se ordenan en orden de la A a la Z.
SELECT ID,Nombre,Apellido,
Correoelectrónico,AddressLine,Ciudad,Cargo
FROM Empleado order by Ciudad desc, cargo asc
Agregue desc a ambas columnas para ordenar ambas en orden descendente. Al hacerlo, evita que la columna se ordene en orden ascendente, que como sabes es el valor predeterminado:
SELECT ID,Nombre,Apellido,
Correoelectrónico,AddressLine,
Ciudad,Cargo
FROM Empleado
order by Ciudad desc, cargo desc
SQL ORDER BY: EXPRESIÓN DE CALCULO
Hasta ahora has aprendido a ordenar en una o más columnas, pero ¿sabías que puedes ordenar en una expresión?
Por ejemplo, considere OrderDetail, tal vez le gustaría saber quién tiene los pedidos más grandes. Por supuesto, puede ordenar por Cantidad o UnitPricio, pero ¿qué pasa con TotalPricio? ¿Podemos ordenar esto?
Echa un vistazo a lo siguiente, y mira de cerca la cláusula sql ORDER BY, allí verás dónde está ordenado por TotalPricio (UnitPricio * Cantidad)
SELECT OrderID,
UnitPricio,
Cantidad
FROM pedido
ORDER BY UnitPricio * Cantidad
Para que quede más claro, también mostremos el TotalPricio, que conduce a la segunda vía:
SELECT OrderID,
UnitPricio,
Cantidad,
UnitPricio * Cantidad AS TotalPricio
FROM Pedido.OrderDetail
ORDER BY UnitPricio * Cantidad
Y aquí es donde el alia, o el cambio de nombre de los campos, puede ayudar. Aquí UnitPricio * Cantidad se alias como TotalPricio en la cláusula SELECT. Ahora que está hecho, simplemente podemos referirnos a TotalPricio al especificar el orden de clasificación.
SELECT OrderID,
UnitPricio,
Cantidad,
UnitPrice * Cantidad AS TotalPrice
FROM Pedido.OrderDetail
ORDER BY TotalPrice
Es posible que se pregunte por qué querría ordenar en el cálculo cuando solo puedo agregar una columna a mi SELECT y ordenar en eso.
Mi respuesta es que es posible que desee ordenar en un elemento que no necesita mostrar. En este caso, SQL es flexible. Le permite ordenar por valor que no está dentro de su resultado.
Obtenga los mejores resultados
El último elemento que me gustaría repasar con usted es poder limitar el número de resultados ordenados devueltos de una lista. Esto hace que sea muy fácil devolver los «primeros diez» o «diez primeros» elementos en una búsqueda.
Por ejemplo, si desea conocer los cinco elementos principales de OrderDetail, puede ingresar la siguiente consulta en SSMS
SELECT TOP 5 OrderID,
UnitPricio,
Cantidad,
UnitPricio * Cantidad AS TotalPricio
FROM Pedido.OrderDetail
ORDER BY TotalPricio
La palabra clave TOP limita nuestra búsqueda a las primeras cinco filas. Puede limitar por otros números, por supuesto, de hecho, también puede limitar por cualquier número resultante de una expresión.
¡Propina! Para obtener las últimas cinco filas de un resultado, como los cinco pedidos más pequeños, simplemente ordene su resultado en orden descendente.