viernes, 15 de agosto de 2014

ORDER BY Usando la cláusula para ordenar registros

En ocasiones es necesario ordenar los registros devueltos o recuperados de la consulta.
Con la cláusula ORDER BY se puede ordenar los registros recuperados de forma
                ASC        : Ascendente “Esta forma es la que por defecto usa ORACLE” y
                DESC      : Orden descendente.
La cláusula ORDER BY es la última que se ubica en una consulta SQL.
Si no se usa la cláusula ORDER BY, el orden de los registros recuperados es indefinido.
Se puede usar la palabra clave NULLS FIRST O NULLS LAST para indicar que los valores nulos de la columna que se están ordenando, se muestren al principio o al final.
La estructura de una consulta con la cláusula ORDER BY es:
SELECT                  expresión
FROM                   tabla
[WHERE condición o condiciones]            
[ORDER BY {columnas, expresiones, posición numérica} [ASC|DESC]]

Miremos algunos ejemplos:
SELECT
    last_name
   ,job_id
   ,salary
FROM hr.employees
WHERE  salary < 3000
ORDER BY last_name;


Por defecto se ordena en orden ascendente, si usamos la palabra clave ASC obtendríamos el mismo resultado.
SELECT
    last_name
   ,job_id
   ,salary
FROM hr.employees
WHERE  salary < 3000
ORDER BY last_name ASC;


Si usamos  la palabra clave DESC ordena de mayor a menor.
SELECT
    last_name
   ,job_id
   ,salary
FROM hr.employees
WHERE  salary < 3000
ORDER BY last_name DESC;


Los valores ordenados para las columnas de números es en orden ascendente desde el 0 hasta Infinito, para los valores de cadena de caracteres es de la A a la Z, para los valores de fechas van primero las fechas anteriores, es decir: va primero 13-JAN-01 que 21-APR-08


Veamos un ejemplo de cómo se usa NULLS FIRST o NULLS LAST
SELECT
     last_name
    ,hire_date
    ,department_id
FROM hr.employees
ORDER BY department_id DESC NULLS FIRST;


Si usamos NULLS FIRST  dejamos los nulos al inicio del resultado o de los registros recuperados.
Por el contrario  NULLS LAST los deja al final de los registros recuperados.
SELECT
     last_name
    ,hire_date
    ,department_id
FROM hr.employees
ORDER BY department_id DESC NULLS LAST;


Ordenar por posición numérica
Así como podemos ordenar por el nombre de la columna, también podemos ordenar por orden numérico,
En la siguiente consulta vamos a analizar el posicionamiento o como está definido el orden numérico:
SELECT
     last_name
    ,hire_date
    ,department_id
FROM hr.employees
ORDER BY 1;


Cuando hablamos de ordenamiento numérico definimos que las columnas que se van a consultar o mostrar, tienen o se les asigna un valor numérico, para el caso de nuestra consulta:
last_name          : tiene el numero 1
hire_date            : tiene el numero 2
hire_date            : tiene el numero 3
department_id : tiene el numero 4

Si deseamos ordenar por la columna hire_date debemos usar ORDER BY 2 así:
SELECT
     last_name
    ,hire_date
    ,department_id
FROM hr.employees
ORDER BY 2;
El resultado de esta consulta es:



La proxima publicacion : Variables de sustitución (Substitution variables )