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.
- Si usamos alias y este cambia, se debe modificar la cláusula ORDER BY
- 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.
apoyado en:http://deletesql.com/viewtopic.php?f=5&t=15
No hay comentarios.:
Publicar un comentario