Cómo ordenar los resultados de una consulta SQL

Rodrigo Ricardo Publicado el 14 noviembre, 2020 6 minutos y 23 segundos de lectura

Cláusula ORDER BY en SQL

La instrucción SELECT obtiene filas de las tablas sin ningún orden en particular. ¿Cómo clasifica los datos obtenidos de la forma deseada? Puede utilizar la cláusula ORDER BY para ordenar los datos según una o más columnas.

Supongamos que está obteniendo la lista de nombres de la tabla de empleados. El siguiente SQL nos lo consigue.

SELECCIONAR * de los empleados;

emp_noFecha de nacimientonombre de pilaapellidogénerofecha de contratación
2649021958-10-19ZeljkoZweizigF1995-10-15
154271959-03-06AluzioAamodtMETRO1985-03-03
1069530 de agosto de 1962ZoricaActonMETRO1989-08-05
2177641954-09-26IngmarMassonetMETRO1986-03-31
4129531952-07-25FrederiqueSwistF1988-04-07
271881959-02-16VasiliiAamodtF1996-10-12
2396551962-02-22LuiseBhattacharjeeMETRO1997-10-29
446731963-05-31KenseiBrookmanF1986-01-31
7639215/12/1959CristinelActonF1996-09-22
2941361953-01-10OguzZweizigMETRO1989-10-26
2371841964-12-08JoAnneSwistMETRO1991-07-21

Con una columna en la cláusula ORDER BY

Es posible que desee que la lista de empleados esté ordenada por su apellido en orden ascendente. Lo que esto significa es que los apellidos están ordenados de la A a la Z, con los apellidos que comienzan con una A apareciendo primero, abajo hasta la Z, que aparecerá al final. El orden ascendente es el orden predeterminado que se supone en cada columna que desea ordenar. Puede especificar esto explícitamente agregando la palabra clave ASC después del nombre de la columna, pero esto es opcional.

SELECCIONAR * de empleados ORDER BY last_name;

o, de manera similar,

SELECCIONAR * de empleados ORDENAR POR apellido ASC;

emp_noFecha de nacimientonombre de pilaapellidogénerofecha de contratación
154271959-03-06AluzioAamodtMETRO1985-03-03
271881959-02-16VasiliiAamodtF1996-10-12
1069530 de agosto de 1962ZoricaActonMETRO1989-08-05
7639215/12/1959CristinelActonF1996-09-22
2396551962-02-22LuiseBhattacharjeeMETRO1997-10-29
446731963-05-31KenseiBrookmanF1986-01-31
2177641954-09-26IngmarMassonetMETRO1986-03-31
2371841964-12-08JoAnneSwistMETRO1991-07-21
4129531952-07-25FrederiqueSwistF1988-04-07
2649021958-10-19ZeljkoZweizigF1995-10-15
2941361953-01-10OguzZweizigMETRO1989-10-26

¿Qué pasa si queremos que los apellidos que comienzan con una Z aparezcan primero en la lista y aquellos con una A aparezcan al final? Esto está en orden descendente y para ordenar en función del apellido en orden descendente usaremos la palabra clave DESC.

SELECCIONAR * de los empleados ORDER BY last_name DESC;

emp_noFecha de nacimientonombre de pilaapellidogénerofecha de contratación
2649021958-10-19ZeljkoZweizigF1995-10-15
2941361953-01-10OguzZweizigMETRO1989-10-26
2371841964-12-08JoAnneSwistMETRO1991-07-21
4129531952-07-25FrederiqueSwistF1988-04-07
2177641954-09-26IngmarMassonetMETRO1986-03-31
446731963-05-31KenseiBrookmanF1986-01-31
2396551962-02-22LuiseBhattacharjeeMETRO1997-10-29
1069530 de agosto de 1962ZoricaActonMETRO1989-08-05
7639215/12/1959CristinelActonF1996-09-22
154271959-03-06AluzioAamodtMETRO1985-03-03
271881959-02-16VasiliiAamodtF1996-10-12

Con varias columnas en la cláusula ORDER BY

¿Qué pasa si queremos ordenar los nombres además de los apellidos? Simplemente podemos especificar esto agregando la columna de nombre después del apellido. Lo que hace esto es que los apellidos se ordenarán en orden ascendente y si los apellidos de dos o más filas son iguales, entonces los nombres de esas filas se ordenarán en orden ascendente. Tenga en cuenta que en el conjunto de resultados a continuación tiene los nombres ordenados en orden ascendente para los apellidos Aamodt, Acton, Swist y Zweizig.

SELECCIONAR * de empleados ORDER BY last_name, first_name;

emp_noFecha de nacimientonombre de pilaapellidogénerofecha de contratación
154271959-03-06AluzioAamodtMETRO1985-03-03
271881959-02-16VasiliiAamodtF1996-10-12
7639215/12/1959CristinelActonF1996-09-22
1069530 de agosto de 1962ZoricaActonMETRO1989-08-05
2396551962-02-22LuiseBhattacharjeeMETRO1997-10-29
446731963-05-31KenseiBrookmanF1986-01-31
2177641954-09-26IngmarMassonetMETRO1986-03-31
4129531952-07-25FrederiqueSwistF1988-04-07
2371841964-12-08JoAnneSwistMETRO1991-07-21
2941361953-01-10OguzZweizigMETRO1989-10-26
2649021958-10-19ZeljkoZweizigF1995-10-15

Ahora, ordenemos el apellido en orden descendente y el nombre en orden ascendente.

SELECCIONAR * de empleados ORDER BY last_name DESC, first_name;

emp_noFecha de nacimientonombre de pilaapellidogénerofecha de contratación
2941361953-01-10OguzZweizigMETRO1989-10-26
2649021958-10-19ZeljkoZweizigF1995-10-15
4129531952-07-25FrederiqueSwistF1988-04-07
2371841964-12-08JoAnneSwistMETRO1991-07-21
2177641954-09-26IngmarMassonetMETRO1986-03-31
446731963-05-31KenseiBrookmanF1986-01-31
2396551962-02-22LuiseBhattacharjeeMETRO1997-10-29
7639215/12/1959CristinelActonF1996-09-22
1069530 de agosto de 1962ZoricaActonMETRO1989-08-05
154271959-03-06AluzioAamodtMETRO1985-03-03
271881959-02-16VasiliiAamodtF1996-10-12

Con números de columna posicionales en la cláusula ORDER BY

La mayoría de los motores de base de datos también le permiten especificar las columnas en una cláusula ORDER BY utilizando números de posición. Por lo tanto, en lugar de escribir los nombres de las columnas en la cláusula ORDER BY, podemos escribir la posición numérica de la columna que queremos ordenar seguida de la palabra clave ASC / DESC. La consulta anterior también se puede reescribir en el siguiente formato para dar los mismos resultados, ya que la cuarta columna es la columna last_name y la tercera columna es la columna first_name.

SELECT emp_no, birth_date, first_name, last_name, gender, Hire_date de los empleados ORDER BY 4 DESC, 3;

Con nombres de columna en la cláusula ORDER BY que no forman parte de la instrucción SELECT

Muchos motores de base de datos le permiten ordenar los datos en función de columnas o expresiones que no forman parte de las columnas seleccionadas (conjunto de resultados). Podríamos escribir una consulta para ver si funciona de la siguiente manera. La consulta devolverá los resultados ordenados en orden ascendente de la fecha de contratación del empleado, con la fecha de contratación más antigua primero en la lista y la fecha de contratación más reciente que aparece en último lugar en la lista.

SELECCIONE emp_no, first_name, last_name de los empleados ORDER BY Hire_date;

emp_nonombre de pilaapellido
15427AluzioAamodt
44673KenseiBrookman
217764IngmarMassonet
412953FrederiqueSwist
10695ZoricaActon
294136OguzZweizig
237184JoAnneSwist
264902ZeljkoZweizig
76392CristinelActon
27188VasiliiAamodt
239655LuiseBhattacharjee

Puede comprobar por sí mismo que el orden en el conjunto de resultados anterior es correcto emitiendo la misma consulta que también muestra la columna Hire_date.

SELECCIONE emp_no, first_name, last_name, Hire_date de los empleados ORDER BY Hire_date;

emp_nonombre de pilaapellidofecha de contratación
15427AluzioAamodt1985-03-03
44673KenseiBrookman1986-01-31
217764IngmarMassonet1986-03-31
412953FrederiqueSwist1988-04-07
10695ZoricaActon1989-08-05
294136OguzZweizig1989-10-26
237184JoAnneSwist1991-07-21
264902ZeljkoZweizig1995-10-15
76392CristinelActon1996-09-22
27188VasiliiAamodt1996-10-12
239655LuiseBhattacharjee1997-10-29

Resumen

La cláusula ORDER BY le permite ordenar el resultado de una consulta SQL en orden ascendente (predeterminado) o descendente. Puede ordenar en una o más columnas especificando los nombres o posiciones de las columnas en la cláusula ORDER BY. También puede ordenar el conjunto de resultados según una o más columnas que no forman parte del conjunto de resultados.

Explora más sobre este tema

Selecciona un tema y sigue aprendiendo...

Rodrigo Ricardo
Rodrigo Ricardo Editor y fundador