Ir al contenido principal

Ordenamiento Compuesto ok


El resultado de una consulta puede ser ordenado por más de una columna o expresión a esto se le llama ordenamiento compuesto. Pueden ser especificadas más de una columnas para el ordenamiento, puede ser literal o posicional. Las columnas listadas en la clausula ORDER BY  se deberán separar por comas.
Cada columna involucrada en el ordenamiento es listada de izquierda a derecha en orden, separados por comas en la cláusula ORDER BY, incluyendo los modificadores DESC|ASC NULLS FIRST NULLS LAST especificado para cada columna. A cada columna podemos especificar modificadores.

Ejemplos:

-- ESQUEMA HR
-- REGIONS LOCATIONS DEPARTMENTS COUNTRIES JOB_HISTORY EMPLOYEES JOBS
SELECT job_id, salary FROM employees ORDER BY job_id ASC, salary ASC;
SELECT job_id, salary FROM employees ORDER BY job_id ASC, salary DESC;
SELECT job_id, salary FROM employees ORDER BY job_id DESC, salary ASC;
SELECT job_id, salary FROM employees ORDER BY job_id DESC, salary DESC;

SELECT job_id, salary FROM employees ORDER BY 1 ASC, 2 ASC;
SELECT job_id, salary FROM employees ORDER BY 1 ASC, 2 DESC;
SELECT job_id, salary FROM employees ORDER BY 1 DESC, 2 ASC;
SELECT job_id, salary FROM employees ORDER BY 1 DESC, 2 DESC;

SELECT job_id, first_name FROM employees ORDER BY job_id ASC, first_name DESC

-- ESQUEMA HR
-- REGIONS LOCATIONS DEPARTMENTS COUNTRIES JOB_HISTORY EMPLOYEES JOBS

SELECT region_id, region_name FROM regions ORDER BY region_id;
SELECT region_id, region_name FROM regions ORDER BY 1;
SELECT region_id, region_name FROM regions ORDER BY region_name;
SELECT region_id, region_name FROM regions ORDER BY 2;
SELECT region_id, region_id || ' - ' || region_name AS region FROM regions ORDER BY region_id ASC NULLS LAST;
SELECT region_id, region_id || ' - ' || region_name AS region FROM regions ORDER BY region_id ASC NULLS LAST;

SELECT location_id, street_address, postal_code, city, state_province, country_id FROM locations ORDER BY location_id ASC;
SELECT location_id, street_address, postal_code, city, state_province, country_id FROM locations ORDER BY city ASC, state_province ASC;

SELECT DISTINCT department_name FROM departments ORDER BY department_name;

SELECT * FROM countries ORDER BY region_id ASC, country_id ASC;

SELECT * FROM job_history ORDER BY employee_id, start_date, job_id DESC;

SELECT job_id, job_title FROM jobs ORDER BY 1;

SELECT job_id || job_title FROM jobs ORDER BY job_id || job_title;
SELECT job_id || job_title FROM jobs ORDER BY 1;
SELECT job_id || job_title TEXTO FROM jobs ORDER BY TEXTO;

Conclusión la clausula ORDER BY nos permite ordenar el resultado de una consulta, la clausula ORDER BY no afecta la consulta solo el resultado de esta. Esta es especificada mediante la clausula ORDER BY que va al final de la clausula SELECT.  En la clausula ORDER BY podemos especificar más de una columna, expresión o posición. Las columnas las podemos ordenar en forma ascendente o descendente mediante los modificadores ASC y DESC que van luego de la columna a ordenar, así como también podemos decirle a Oracle donde queremos que aparezcan los valores nulos si la columna a ordenar contiene. Hay un comportamiento por defecto de las columnas al especificarlas en la clausula ORDER BY. Si especificamos una columna sin modificadores ASC o DESC, la columna se ordena por defecto como ASC ascendente. Y si no especificamos NULLS LAST o NULLS FIRST, el comportamiento es el siguiente, si ordenamos una columna en forma ascendente y no especificamos donde colocar los nulos el valor por defecto es NULLS LAST, si ordenamos una columna en forma descendente y no especificamos donde van a quedar los nulos el valor por defecto es NULLS FIRST. Así como también podemos ordenar por posición, esta forma asigna una posición a cada columna listada en la clausula SELECT iniciando desde la posición 1, entonces en la clausula ORDER BY escribimos la posición de la columna.                 

Comentarios