ORDENAR POR en MySQLConsulta ASC y DESC con ejemplo
⚡ Resumen inteligente
ORDENAR POR en MySQL Ordena los conjuntos de resultados de las consultas en orden ascendente o descendente mediante las palabras clave ASC y DESC. Las secciones siguientes explican la sintaxis, la ordenación por una o varias columnas, la ubicación de los valores NULL y ejemplos prácticos ejecutados con la base de datos de ejemplo myflixdb.
¿Qué es ORDER BY en MySQL?
MySQL ORDEN POR es una cláusula que se utiliza con la consulta SELECT para ordenar los datos de manera ordenada. MySQL La cláusula ORDER BY ordena el conjunto de resultados de la consulta en orden ascendente o descendente, por una columna o por varias columnas a la vez.
Cuando se utiliza el comando SELECT de forma independiente, las filas se devuelven en el orden en que el motor de almacenamiento las lee, lo cual no garantiza un orden específico. La ordenación consiste simplemente en reorganizar esas filas en una secuencia determinada. Se puede aplicar a datos numéricos, de cadena y de fecha.
MySQL ORDENAR POR Sintaxis
Antes de ver los ejemplos, conviene observar dónde se ubica la cláusula dentro de una instrucción SELECT completa.
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
AQUÍ
- "Instrucción SELECT... " es la consulta select habitual.
- ” | “ representa alternativas.
- “[WHERE condición | GROUP BY `field_name(s)` HAVING condición]” es la condición opcional que se utiliza para filtrar el conjunto de resultados de la consulta.
- “ORDENAR POR” Realiza la ordenación del conjunto de resultados de la consulta.
- “[ASC | DESC]” es la palabra clave que se utiliza para ordenar el conjunto de resultados en orden ascendente o descendente. Tenga en cuenta que ASC es el predeterminado.
¿Qué son las palabras clave DESC y ASC?
ASC y DESC son las dos direcciones de ordenación que acepta ORDER BY. La siguiente tabla las compara según los tipos de datos que se ordenan con mayor frecuencia.
ASC es la forma corta de ascender |
MySQL DESC es la forma corta de descender |
|---|---|
| Se utiliza para ordenar los resultados de la consulta de arriba a abajo. | Se utiliza para ordenar los resultados de la consulta de abajo hacia arriba. |
| Cuando se trabaja con tipos de datos de fecha, la fecha más antigua se muestra en la parte superior de la lista. | Al trabajar con datos de tipo fecha, la fecha más reciente se muestra en la parte superior de la lista. |
| Cuando se trabaja con tipos de datos numéricos, los valores más bajos se muestran en la parte superior de la lista. | Al trabajar con tipos de datos numéricos, los valores más altos se muestran en la parte superior del conjunto de resultados de la consulta. |
| Cuando se trabaja con tipos de datos de cadena, el conjunto de resultados de la consulta se ordena desde aquellos que comienzan con la letra A hasta la letra Z. | Cuando se trabaja con tipos de datos de cadena, el conjunto de resultados de la consulta se ordena desde aquellos que comienzan con la letra Z hasta la letra A. |
Las palabras clave SQL DESC y ASC se utilizan junto con la instrucción SELECT y la MySQL Cláusula ORDER BY.
Sintaxis DESC y ASC
La palabra clave de ordenación SQL DESC tiene la siguiente sintaxis básica.
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
AQUÍ
- SELECCIONE {nombre(s) de campo | *} FROM nombre(s) de tabla(s) es la declaración que contiene los campos y la(s) tabla(s) de las cuales obtener el conjunto de resultados.
- [DONDE condición] Es opcional pero se puede utilizar para filtrar los datos según la condición dada.
- ORDENAR POR nombre(s) de campo es obligatorio y nombra el campo sobre el cual se realiza la ordenación. MySQL La palabra clave DESC especifica que la clasificación se realiza en orden descendente.
- [LÍMITE N] Es opcional, pero puede utilizarse para limitar el número de filas devueltas en el conjunto de resultados de la consulta.
¿Por qué usar DESC y ASC en? MySQL?
Conocer la sintaxis es solo una parte del panorama. La razón por la que existe la cláusula ORDER BY es que un conjunto de resultados que una base de datos puede generar fácilmente no siempre es fácil de leer para una persona.
Supongamos que imprimes el historial de pagos de un miembro de la videoteca para que la recepción pueda responder a sus consultas rápidamente. Es mucho más lógico imprimir los pagos en orden cronológico descendente, comenzando por el más reciente y retrocediendo hasta el más antiguo. La palabra clave DESC en SQL resulta muy útil en esta situación, ya que permite ordenar la lista por fecha de pago.
Supongamos ahora que el departamento de marketing necesita una lista de películas por categoría, para que los socios puedan ver qué títulos tiene la biblioteca antes de alquilarlos. Ordenar las categorías y los títulos de las películas en orden ascendente permite a los socios buscar información rápidamente, igual que en un índice. La palabra clave ASC cumple esa función.
En resumen, ORDER BY convierte un conjunto de resultados sin procesar en un informe. La palabra clave que elijas dependerá de la pregunta que formule el lector: lo que sucedió más recientemente llama a DESC, mientras que ¿Dónde puedo encontrar este artículo? llama a ASC.
MySQL Ejemplo de ORDENAR POR
Todos los ejemplos que siguen se ejecutan sobre la base de datos de ejemplo myflixdb. Comience con la tabla de miembros sin ordenar, que se devuelve en su orden predeterminado.
SELECT * FROM members;
Ejecutando el script anterior en MySQL Workbench, al trabajar con myflixdb, nos da los siguientes resultados que se muestran a continuación.
| número de socio | nombres completos | género | fecha de nacimiento | dirección física | dirección postal | número_de_contacto | o enviar un email. |
|---|---|---|---|---|---|---|---|
| 1 | Janet jones | Mujer | 21-07-1980 | Primera Calle Parcela No 4 | Bolsa privada | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Mujer | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Roberto Phil | Hombre | 12-07-1989 | Calle 3 34 | NULL | 12345 | rm@tstreet.com |
| 4 | gloria williams | Mujer | 14-02-1984 | Calle 2 23 | NULL | NULL | NULL |
| 5 | leonard hofstadter | Hombre | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Hombre | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Hombre | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkel | Hombre | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Hombre | 24-08-1981 | Parque del Sur | PO Box 4563 | 987786553 | NULL |
Ordenación en orden descendente con DESC
Supongamos que el departamento de marketing desea que los datos de los miembros estén ordenados de forma descendente según su fecha de nacimiento. Esto ayuda al equipo a enviar felicitaciones de cumpleaños a tiempo. La lista se genera mediante la siguiente consulta.
SELECT * FROM members ORDER BY date_of_birth DESC;
Ejecutando el script anterior en MySQL Workbench, al trabajar con myflixdb, nos da los siguientes resultados que se muestran a continuación.
Ordenación en orden ascendente con ASC
La misma consulta en orden ascendente simplemente intercambia la palabra clave.
SELECT * FROM members ORDER BY date_of_birth ASC;
Nota: NULL significa ningún valor, lo cual no es lo mismo que cero o una cadena vacía. Observe en ambas capturas de pantalla cómo se agrupan las fechas NULL: MySQL Considera que NULL es un valor inferior a cualquier otro, por lo que las filas con valores NULL aparecen primero en orden ascendente (ASC) y al final en orden descendente (DESC).
Cómo ordenar por varias columnas en MySQL
La ordenación por una sola columna permite resolver preguntas sencillas. Los informes suelen requerir un segundo nivel de ordenación, y la función ORDER BY acepta una lista de campos separados por comas precisamente para ese fin.
Considere el siguiente script de ordenación SQL que enumera todos los registros de miembros sin ninguna instrucción explícita.
SELECT * FROM `members`;
La ejecución del script anterior arroja los siguientes resultados que se muestran a continuación.
| número de socio | nombres completos | género | fecha de nacimiento | dirección física | dirección postal | número_de_contacto | o enviar un email. |
|---|---|---|---|---|---|---|---|
| 1 | Janet jones | Mujer | 21-07-1980 | Primera Calle Parcela No 4 | Bolsa privada | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Mujer | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Roberto Phil | Hombre | 12-07-1989 | Calle 3 34 | NULL | 12345 | rm@tstreet.com |
| 4 | gloria williams | Mujer | 14-02-1984 | Calle 2 23 | NULL | NULL | NULL |
| 5 | leonard hofstadter | Hombre | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Hombre | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Hombre | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkel | Hombre | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Hombre | 24-08-1981 | Parque del Sur | PO Box 4563 | 987786553 | NULL |
Ordenar una sola columna por orden predeterminado
Supongamos que queremos una lista que ordene el conjunto de resultados de la consulta utilizando el campo de género. El siguiente script lo hace sin especificar una dirección.
SELECT * FROM `members` ORDER BY `gender`;
| número de socio | nombres completos | género | fecha de nacimiento | dirección física | dirección postal | número_de_contacto | o enviar un email. |
|---|---|---|---|---|---|---|---|
| 1 | Janet jones | Mujer | 21-07-1980 | Primera Calle Parcela No 4 | Bolsa privada | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Mujer | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | gloria williams | Mujer | 14-02-1984 | Calle 2 23 | NULL | NULL | NULL |
| 3 | Roberto Phil | Hombre | 12-07-1989 | Calle 3 34 | NULL | 12345 | rm@tstreet.com |
| 5 | leonard hofstadter | Hombre | NULL | Woodcrest | NULL | 845738767 | NULL |
| 6 | Sheldon Cooper | Hombre | NULL | Woodcrest | NULL | 976736763 | NULL |
| 7 | Rajesh Koothrappali | Hombre | NULL | Woodcrest | NULL | 938867763 | NULL |
| 8 | Leslie Winkel | Hombre | 14-02-1984 | Woodcrest | NULL | 987636553 | NULL |
| 9 | Howard Wolowitz | Hombre | 24-08-1981 | Parque del Sur | PO Box 4563 | 987786553 | NULL |
Los miembros “Femeninos” se muestran primero, seguidos de los miembros “Masculinos”. Esto se debe a que cuando se utiliza la cláusula ORDER BY sin especificar el ASC o MySQL Palabra clave DESC, MySQL Por defecto, ordena el conjunto de resultados de la consulta en orden ascendente.
Ordenar dos columnas en direcciones opuestas
Veamos ahora un ejemplo que realiza la ordenar usando dos columnasLa primera columna es ordenados in orden ascendente por defecto, mientras que la segunda columna es ordenados in orden descendiente.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
Ejecutando el script anterior en MySQL Workbench, al trabajar con myflixdb, arroja los siguientes resultados.
La columna de género se ordenó de forma ascendente por defecto, mientras que la columna de fecha de nacimiento se ordenó explícitamente de forma descendente. Cada palabra clave de dirección se aplica únicamente a la columna que le sigue.
Cómo combinar ORDER BY con WHERE, LIMIT y GROUP BY
La cláusula ORDER BY rara vez es la única en una consulta de producción. MySQL Siempre evalúa las cláusulas en una secuencia fija, y conocer esa secuencia explica por qué los resultados tienen el aspecto que tienen.
- DESDE lee las filas de la tabla.
- Dónde descarta las filas que no cumplen la condición.
- GRUPO POR agrupa las filas restantes y HAVING filtra esos grupos.
- ORDEN POR secuencia las filas que queden.
- LIMITE LAS recorta el número de filas solicitado de la lista ordenada.
Dado que ORDER BY se ejecuta después de WHERE y GROUP BY, pero antes de LIMIT, una consulta como "los cinco miembros más jóvenes de Woodcrest" se expresa en una sola instrucción.
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
El mismo orden se aplica a los resultados agrupados. Valores agregados producidos por Funciones agregadas Por ejemplo, se pueden ordenar los datos según el criterio COUNT, de modo que la categoría con mayor actividad aparezca en la parte superior del informe.
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
Tip: ORDER BY permite ordenar por alias de columna, por una expresión o incluso por posición de columna, como ORDER BY 3. Ordenar por posición es delicado, ya que al insertar una nueva columna en la lista SELECT se modifica silenciosamente la clave de ordenación. En su lugar, asigne un nombre a la columna.
Un punto de rendimiento que vale la pena recordar. Cuando la columna ordenada contiene un índice, MySQL Se pueden leer las filas en orden de índice y omitir la ordenación por completo. Sin un índice, las tablas grandes obligan a realizar una ordenación de archivos en memoria o en disco, lo que suele ser la razón por la que una consulta de informe se vuelve lenta.


ASC es la forma corta de ascender
MySQL DESC es la forma corta de descender

