Resumen: en este tutorial, aprenderá a ordenar un conjunto de resultados utilizando la cláusula ORDER BY
de MySQL.
Introducción a la cláusula ORDER BY de MySQL
Cuando se utiliza la sentencia SELECT
para consultar datos de una tabla, el conjunto de resultados no está ordenado. Esto significa que las filas del conjunto de resultados pueden estar en cualquier orden.
Para ordenar el conjunto de resultados, se añade la cláusula ORDER BY
a la sentencia SELECT
. A continuación se ilustra la sintaxis de la cláusula ORDER BY
:
En esta sintaxis, se especifica la o las columnas que se quieren ordenar después de la cláusula ORDER BY
.
El ASC
significa ascendente y el DESC
significa descendente. Se utiliza ASC
para ordenar el conjunto de resultados en orden ascendente y DESC
para ordenar el conjunto de resultados en orden descendente.
Esta cláusula ORDER BY
ordena el conjunto de resultados en orden ascendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
Y esta cláusula ORDER BY
ordena el conjunto de resultados en orden descendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 DESC;
Por defecto, la cláusula ORDER BY
utiliza ASC
si no se especifica explícitamente ninguna opción.
Por lo tanto, las siguientes cláusulas son equivalentes:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC;
y
Code language: SQL (Structured Query Language) (sql)ORDER BY column1;
Si quieres ordenar el conjunto de resultados por varias columnas, especifica una lista de columnas separadas por comas en la cláusula ORDER BY
:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1, column2;
Es posible ordenar el resultado por una columna en orden ascendente, y luego por otra columna en orden descendente:
Code language: SQL (Structured Query Language) (sql)ORDER BY column1 ASC, column2 DESC;
En este caso, la cláusula ORDER BY
:
- Primero, ordena el conjunto de resultados por los valores del
column1
en orden ascendente. - A continuación, ordena el conjunto de resultados ordenado por los valores en el
column2
en orden descendente. Tenga en cuenta que el orden de los valores en elcolumn1
no cambiará en este paso, sólo cambia el orden de los valores en elcolumn2
.
Nota que la cláusula ORDER BY
siempre se evalúa después de la cláusula FROM
y SELECT
.
Ejemplos de ORDER BY en MySQL
Utilizaremos la tabla customers
de la base de datos de ejemplo para la demostración.
A) Uso de la cláusula ORDER BY de MySQL para ordenar los valores de una columna ejemplo
.
La siguiente consulta utiliza la cláusula ORDER BY
para ordenar los clientes por los valores de la columna contactLastName
en orden ascendente.
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname;
Prueba
Si quieres ordenar los clientes por el apellido en orden descendente, se utiliza el DESC
después de la columna contactLastname
en la cláusula ORDER BY
como se muestra en la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC;
Prueba
B) Uso de la cláusula ORDER BY de MySQL. para ordenar valores en múltiples columnas ejemplo
Si quieres ordenar los clientes por el apellido en orden descendente y luego por el nombre en orden ascendente, especifica tanto DESC
como ASC
en la columna correspondiente de la siguiente manera:
Code language: SQL (Structured Query Language) (sql)SELECTcontactLastname,contactFirstnameFROMcustomersORDER BYcontactLastname DESC,contactFirstname ASC;
Prueba
En este ejemplo, la cláusula ORDER BY
ordena el conjunto de resultados por el último nombre en orden descendente primero y luego ordena el conjunto de resultados ordenados por el primer nombre en orden ascendente para producir el conjunto de resultados final.
C) Uso de MySQL ORDER BY para ordenar un conjunto de resultados por una expresión de ejemplo
Vea la siguiente orderdetails
tabla de la base de datos de ejemplo.
La siguiente consulta selecciona las partidas de pedido de la tabla orderdetails
. Calcula el subtotal de cada partida y ordena el conjunto de resultados en función del subtotal.
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderlinenumber, quantityOrdered * priceEachFROM orderdetailsORDER BY quantityOrdered * priceEach DESC;
Prueba
Para hacer la consulta más legible, puedes asignar a la expresión de la cláusula SELECT
un alias de columna y utilizar ese alias de columna en la cláusula ORDER BY
como se muestra en la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotalFROM orderdetailsORDER BY subtotal DESC;
Prueba
En este ejemplo, hemos utilizado subtotal
como alias de columna para la expresión quantityOrdered * priceEach
y hemos ordenado el conjunto de resultados por el subtotal
alias.
El alias de columna se puede utilizar en la cláusula ORDER BY
porque la cláusula SELECT
se evalúa antes que la cláusula ORDER BY
. En el momento en que la cláusula ORDER BY
se evalúa, el alias de la columna es accesible.
Usando MySQL ORDER BY para ordenar los datos usando una lista personalizada
La cláusula ORDER BY
permite ordenar los datos usando una lista personalizada mediante la función FIELD()
.
Vea la siguiente tabla orders
de la base de datos de ejemplo.
Suponga que desea ordenar los pedidos de venta en función de sus estados en el siguiente orden:
- En proceso
- En espera
- Cancelado
- Resuelto
- Disputado
- Enviado
Para ello, puedes utilizar la función FIELD()
para mapear cada estado del pedido a un número y ordenar el resultado por el resultado de la función FIELD()
:
Prueba
La siguiente expresión:
Code language: SQL (Structured Query Language) (sql)FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
Devuelve el índice del status
en la lista 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped'
.
Por ejemplo, si el status
es In Process
, la función devolverá 1. Si el status
es On Hold
, la función devolverá 2, y así sucesivamente.
En este tutorial, ha aprendido a utilizar la cláusula ORDER BY
de MySQL para ordenar las filas del conjunto de resultados por una o más columnas en orden ascendente o descendente.
- ¿Ha sido útil este tutorial?
- SíNo
Se puede decir que este tutorial ha sido útil.