Lección 9 - Ordenación del resultado (SQL ORDER BY)

Curso SQL para principiantes


Y llegamos a la última cláusula de una consulta SQL: ORDER BY, que permite ordenar las filas de resultado por una o más columnas. Esta cláusula no se presenta en última instancia por casualidad, sino por que siempre irá al final de una consulta y el motor SQL también será la última cosa que haga, a efectos lógicos, antes de devolver el resultado.
Una última cláusula implica una última pregunta de construcción: ¿Cómo deben ordenarse los datos resultantes?

Supongamos que queremos obtener una lista ordenada de los empleados por sueldo, de modo que primero este situado el de menor salario y por último el de mayor:

Código: Seleccionar todo
  select NOMBRE,APELLIDOS,SALARIO
    from EMPLEADOS
order by SALARIO




Observamos como introduciendo la cláusula ORDER BY e indicando la columna por la que ordenar, el resultado viene ordenado de forma ascendente (ASC), es decir, de menor a mayor. ¿Y si queremos ordenar a la inversa, de mayor a menor? Bien, en ese caso se debe indicar que la ordenación es descendente (DESC). Veamos esto tomando como patrón la consulta anterior:

Código: Seleccionar todo
  select NOMBRE,APELLIDOS,SALARIO
    from EMPLEADOS
order by SALARIO desc




Por tanto si seguido del campo por el que queremos ordenar indicamos ASC, o bien no indicamos nada, la ordenación se hará de forma ascendente, mientras que si indicamos DESC, se hará de forma descendente.

* * *

Veamos un ejemplo donde se ordena por más de un campo. Tomemos por ejemplo la tabla MASCOTAS, y obtengamos una lista de los perros que han pasado por el centro, de modo que primero aparezcan las bajas, y al final las altas, o perros que siguen en el centro. Además queremos que en segundo término la lista este ordenada por nombre:

Código: Seleccionar todo
  select *
    from MASCOTAS
  where ESPECIE 
= 'P'
order by ESTADO desc, NOMBRE asc




* * *

Veamos un poco como resuelve esto el motor SQL. No vamos a entrar en los algoritmos de ordenación que usa, entre otras cosas porque tampoco los conozco, pero si quiero trazar, como hemos venido haciendo a lo largo del curso, lo que el motor SQL hace. En la consulta anterior el motor SQL recorre la tabla MASCOTAS y selecciona aquellos registros en que el campo ESPECIE contiene una "P", ignorando el resto. De los registros que satisfacen la cláusula WHERE tomará todos los campos, puesto que se ha indicado un asterisco en la cláusula SELECT, y una vez ha recorrido toda la tabla y tiene el resultado, lo ordenará según se indica en la cláusula ORDER BY.

Lo que debe quedar claro es que la ordenación, a efectos lógicos, se realiza siempre al final de todo, sobre las filas de resultado, al margen de la tabla, y siempre lo hará así por muy extensa y compleja que sea una consulta. La ordenación es lo último de lo último que realiza el motor SQL. Y como la ordenación se realiza sobre las filas de resultado, existen otras formas de indicar que columnas van a establecer la ordenación. Podemos por ejemplo hacer referencia a la columna por el orden que ocupa en la cláusula SELECT, por ejemplo:

En esta consulta estamos indicando que ordene por el tercer campo de la clausula SELECT:

Código: Seleccionar todo
  select ID_EMPLEADO , NOMBRE , APELLIDOS
    from EMPLEADOS
order by 3




Para ordenar se puede indicar indistintamente el alias con el que se ha rebautizado la columna, o el campo de tabla tenga o no tenga alias.

Código: Seleccionar todo
  select NOMBRE as NAME, APELLIDOS as SURNAMES, SALARIO as SALARY
    from EMPLEADOS
order by SURNAMES


Resultado:


De todos modos se recomienda usar para indicar la columna por la que se quiere ordenar, los nombres de tabla, por dos razones.
  1. Si usamos alias y este cambia, se debe modificar la cláusula ORDER BY
  2. Si usamos posición de columna y se añaden o se eliminan campos de la cláusula SELECT, es posible que se deba modificar la cláusula ORDER BY

* * *

Resumen

La cláusula ORDER BY permite establecer el orden de las filas de resultado en función de las columnas que se indiquen en dicha cláusula:

Código: Seleccionar todo
order by CAMPO_1 , CAMPO_2 , ... , CAMPO_N


Para ordenar en forma descendente por una columna debemos indicar a continuación del nombre de la columna la palabra clave DESC. Para hacerlo de forma ascendente no hace falta indicar nada, si se quiere enfatizar se usa la palabra clave ASC.

Código: Seleccionar todo
order by CAMPO_1 desc , CAMPO_2 desc , ... , CAMPO_N asc


Para hacer referencia a una columna en la clausula ORDER BY, es indiferente usar el alias de una columna, que el orden de la columna en la clausula SELECT, que el nombre de campo de la tabla. Sin embargo se recomienda hacer esto último para minimizar fuentes de error.

* * *

Ejercicio 1
Obtenga una lista de las personas de la tabla PERSONAS, donde primero aparezcan las rubias, después las altas, y finalmente las que llevan gafas. De manera que la primera persona de la lista, si la hay, será rubia alta y sin gafas, y la última, si la hay, no será rubia ni alta y llevará gafas.

Ejercicio 2
Obtenga el número actual de ejemplares de cada ubicación del centro de mascotas, que tengan dos o más ejemplares ordenado de mayor a menor por número de ejemplares y en segundo termino por ubicación.




    Lección 8 - Filtrar cálculos de totalización (SQL HAVING)
  • Lección 10 - El operador LIKE / El valor NULL

Creative Commons License Creative Commons License

Este curso está sujeto a la licencia Reconocimiento-NoComercial-SinObraDerivada 3.0 de Creative Commons. Usted puede copiarla, distribuirla y comunicarla públicamente siempre que especifique su autor y deletesql.com; no la utilice para fines comerciales; y no haga con ella obra derivada. Puede usted consultar la licencia completa aquí.




Volver a Curso SQL desde cero

¿Quién está conectado?

Usuarios navegando por este Foro: Google Adsense [Bot] y 10 invitados