28th Nov 2023 Lectura de 8 minutos ¿Qué significa ORDER BY 1 en SQL? Dominika Florczykowska SQL ORDER BY Índice ¡Veamos ORDER BY 1 en Acción! Orden ascendente y descendente ¿Qué significa ORDER BY 1, 2, 3? Precaución: No utilice la sintaxis ORDER BY 1 ¿Tiene curiosidad por saber más sobre ORDER BY 1? ¿Alguna vez ha visto la sintaxis "ORDER BY 1" en las consultas SQL y se ha preguntado qué significa? En este artículo, exploraremos esta sintaxis, aclararemos su propósito y la haremos más fácil de entender. Tanto si eres un usuario experimentado de SQL como si acabas de empezar a explorar este lenguaje, es probable que te hayas encontrado alguna vez con la cláus ula ORDER BY. En SQL, la cláusula ORDER BY se utiliza para ordenar las filas de una tabla en función de una o varias columnas. Permite ordenar los datos en orden ascendente (A-Z, 1-10) o descendente (Z-A, 10-1) según criterios específicos. Después de la cláusula ORDER BY, normalmente se especifica la columna por la que se quieren ordenar los datos. Sin embargo, le sorprenderá saber que también puede utilizar sintaxis como ORDER BY 1 en una consulta SQL. La sintaxis de una consulta de este tipo es la siguiente: SELECT column_name(s) FROM table_name ORDER BY 1; Si has visto este tipo de código en consultas SQL y te ha dejado perplejo, ¡no te preocupes! Al final de este artículo, entenderás exactamente cómo funciona y cuándo utilizarlo. Y si alguna vez necesitas repasar la sintaxis SQL mientras lees el artículo, no dudes en consultar nuestra práctica hoja de trucosSQL para principiantes . Para ser realmente bueno en SQL, debes practicarlo. Si quieres trabajar con muchos problemas prácticos, te recomendamos que pruebes nuestra ruta Ejercicio de SQL. Aprenderás resolviendo problemas reales, utilizando nuestro editor de código en línea y conjuntos de datos reales. Esta ruta consta de nueve cursos y más de 1.100 ejercicios prácticos con los que practicar. ¡Veamos ORDER BY 1 en Acción! Imagine que tiene una tabla llamada movie con las siguientes columnas: id - El ID de la película, que es también la clave primaria (PK) de la tabla. title - El título de la película. length - La duración de la película en minutos. director - El nombre del director de la película. year - Año de estreno de la película. rating - La calificación de la película (de 1 a 10). Aquí puedes ver un puñado de filas de la tabla: idtitlelengthdirectoryearrating 1The Secret Quest110David Anderson20227 2Lost in Time95Emily Roberts20196 3Starship Odyssey150Michael Turner20218 4The Enchanted Forest85Sarah Johnson20227 5Epic Journey130Mark Lewis20207 6Space Explorers115Lisa Adams20227 7Time Travelers100Paul Miller20216 8Mystic Island140Jessica White20238 9The Great Discovery105Robert Green20217 10Underwater120Mary Johnson20216 ¿Qué ocurre si ejecutamos la siguiente consulta? SELECT title, length, director FROM movie ORDER BY 1; Al especificar ORDER BY 1, estamos indicando a la base de datos que ordene los resultados en función de la primera columna de la lista SELECT, que en este caso es title. Esto significa que la consulta anterior es equivalente a ésta: SELECT title, length, director FROM movie ORDER BY title; La primera consulta es un poco más corta, pero puede resultar más difícil de entender. En la segunda consulta, puede ver fácilmente qué columna se utiliza para la ordenación. Esto reduce la posibilidad de cometer un error. Este es el resultado de nuestra consulta: titlelengthdirector Epic Journey130Mark Lewis Lost in Time95Emily Roberts Mystic Island140Jessica White Space Explorers115Lisa Adams Starship Odyssey150Michael Turner The Enchanted Forest85Sarah Johnson The Great Discovery105Robert Green The Secret Quest110David Anderson Time Travelers100Paul Miller Underwater120Mary Johnson Si cambiara el orden de las columnas seleccionadas, tendría que utilizar un número de columna diferente: SELECT director, title, length FROM movie ORDER BY 2; Como puede ver, utilizar esta sintaxis puede ser un poco complicado. ¿Sabía que puede utilizar una sintaxis similar en la cláusula GROUP BY? Consulte nuestro artículo sobre la sintaxis GROUP BY 1. Orden ascendente y descendente Por defecto, la cláusula ORDER BY ordena los resultados de menor a mayor, es decir, en orden ascendente. Sin embargo, a veces puede ser necesario ordenar los datos en orden descendente. También puede hacerlo utilizando la sintaxis ORDER BY 1. Todo lo que tiene que hacer es añadir la palabra clave ASC o DESC después de 1. Por ejemplo, si quisieras recuperar la lista de las películas y ordenarla de la más larga a la más corta, podrías ejecutar una consulta como ésta: SELECT title, length, director FROM movie ORDER BY 2 DESC; La consulta anterior equivale a: SELECT title, length, director FROM movie ORDER BY length DESC; Y aquí está el resultado de nuestra consulta: titlelengthdirector Starship Odyssey150Michael Turner Mystic Island140Jessica White Epic Journey130Mark Lewis Underwater120Mary Johnson Space Explorers115Lisa Adams The Secret Quest110David Anderson The Great Discovery105Robert Green Time Travelers100Paul Miller Lost in Time95Emily Roberts The Enchanted Forest85Sarah Johnson ¿Qué significa ORDER BY 1, 2, 3? En nuestro ejemplo anterior, ordenamos los datos basándonos en una sola columna. Ahora, nos gustaría ordenar nuestras filas basándonos en tres columnas diferentes: year, rating, y title. Para ello, podemos utilizar la siguiente consulta: SELECT year, rating, title FROM movie ORDER BY 1, 2, 3; Cuando se utiliza ORDER BY con varias columnas, la base de datos ordena primero las filas en función de la primera columna especificada. Si hay valores duplicados en la primera columna, la base de datos sigue ordenando esas filas utilizando la segunda columna especificada, y así sucesivamente. Al utilizar ORDER BY 1, 2, 3, estamos indicando a la base de datos que ordene los resultados basándose en la primera, segunda y tercera columnas de la lista SELECT. Esto equivale a ejecutar la siguiente consulta: SELECT year, rating, title FROM movie ORDER BY year, rating, title; Esto es lo que devuelve la consulta: yearratingtitle 20196Lost in Time 20207Epic Journey 20216Time Travelers 20216Underwater 20217The Great Discovery 20218Starship Odyssey 20227Space Explorers 20227The Enchanted Forest 20227The Secret Quest 20238Mystic Island La consulta anterior ordena los resultados en orden ascendente para todas las columnas. ¿Y si quisiéramos ordenar los resultados por año, de más reciente a más antiguo, por puntuación, de mayor a menor, y por título, alfabéticamente? Podemos hacerlo escribiendo ASC o DESC después de cada columna: SELECT year, rating, title FROM movie ORDER BY 1 DESC, 2 DESC, 3 ASC; El resultado de esta consulta es: yearratingtitle 20238Mystic Island 20227Space Explorers 20227The Enchanted Forest 20227The Secret Quest 20218Starship Odyssey 20217The Great Discovery 20216Time Travelers 20216Underwater 20207Epic Journey 20196Lost in Time Tenga en cuenta que los números de columna de la cláusula ORDER BY no tienen por qué ser consecutivos. También puede escribir una consulta como ésta: SELECT title, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, 1 ASC; Ahora, estamos ordenando a la base de datos que agrupe los resultados basándose en la segunda, tercera y primera columna de la lista SELECT. También puede mezclar números y nombres de columna en una sola cláusula ORDER BY: SELECT title, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, title ASC; Esta vez, estamos agrupando los resultados basándonos en la segunda y tercera columna de la lista SELECT y en la columna title. Las consultas anteriores devuelven lo siguiente: titleyearrating Mystic Island20238 Space Explorers20227 The Enchanted Forest20227 The Secret Quest20227 Starship Odyssey20218 The Great Discovery20217 Time Travelers20216 Underwater20216 Epic Journey20207 Lost in Time20196 Precaución: No utilice la sintaxis ORDER BY 1 El uso de las sintaxis ORDER BY 1 y ORDER BY 1, 2, 3 en SQL se considera generalmente una mala práctica porque dificulta la lectura y el mantenimiento de las consultas. Aunque puede ahorrarle algo de escritura, también puede causar problemas inesperados. El principal problema de este método es que se basa en el orden de las columnas en la sentencia SELECT en lugar de especificar directamente los nombres de las columnas. Si el orden de las columnas cambia o se añaden nuevas columnas, los resultados de la consulta pueden cambiar de forma inesperada. Por ejemplo, supongamos que utilizas la siguiente consulta para obtener la lista de películas ordenadas por año de la más reciente a la más antigua, luego por calificación de la más alta a la más baja y finalmente por título alfabéticamente: SELECT title, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, 1 ASC; Ahora imaginemos que también queremos mostrar el nombre del director en nuestra lista. Podemos conseguirlo modificando un poco la consulta: SELECT title, director, year, rating FROM movie ORDER BY 2 DESC, 3 DESC, 1 ASC; Pero cuando ejecutamos esta consulta, ¡no nos da la respuesta correcta! Este es el resultado que obtenemos: titledirectoryearrating The Enchanted ForestSarah Johnson20227 The Great DiscoveryRobert Green20217 Time TravelersPaul Miller20216 Starship OdysseyMichael Turner20218 UnderwaterMary Johnson20216 Epic JourneyMark Lewis20207 Space ExplorersLisa Adams20227 Mystic IslandJessica White20238 Lost in TimeEmily Roberts20196 The Secret QuestDavid Anderson20227 Parece que las filas no están ordenadas por year, rating, y title como se pretendía. Esto demuestra los peligros potenciales de confiar en el orden de las columnas en lugar de especificar los nombres de las columnas directamente en la cláusula ORDER BY. ¿Puede detectar el error en nuestra consulta modificada? El resultado es incorrecto porque hemos intentado ordenar las filas por las columnas director, year y title en lugar de por el año, la calificación y el título. La consulta correcta sería la siguiente SELECT title, director, year, rating FROM movie ORDER BY 3 DESC, 4 DESC, 1 ASC; Pero podemos evitar este error simplemente utilizando la cláusula ORDER BY con los nombres completos de las columnas: SELECT title, director, year, rating FROM movie ORDER BY year DESC, rating DESC, title ASC; Ahora, incluso si decidimos cambiar o mover columnas en la sentencia SELECT, no tenemos que pensar en la parte ORDER BY. Como puedes ver, es mejor mencionar explícitamente los nombres de las columnas por las que quieres ordenar en la cláusula ORDER BY. De este modo, la consulta será más fácil de leer y es menos probable que contenga errores. El truco de ORDER BY 1 está bien cuando sólo estás consultando datos por tu cuenta y quieres acelerar la escritura. Pero si piensa reutilizar la consulta de algún modo, es mejor utilizar la sintaxis completa con los nombres de las columnas. ¿Tiene curiosidad por saber más sobre ORDER BY 1? Eso es todo por hoy. Si quieres saber más sobre cómo utilizar la cláusula ORDER BY, echa un vistazo a nuestros artículos para aprender a utilizar ORDER BY en detalle y ver algunos ejemplos reales de uso de ORDER BY. Y para más práctica, ¡recuerda visitar nuestra pista Ejercicio de SQL! Tags: SQL ORDER BY