Sabemos que la sentencia SELECT de SQL devuelve las filas sin un orden determinado. Con la ayuda de la cláusula ORDER BY, podemos ordenar las filas en un orden deseado. La cláusula ORDER BY se utiliza para ordenar los registros devueltos. Usando la cláusula ORDER BY, podemos ordenar el resultado en orden ascendente o descendente. Esta cláusula también se puede utilizar con múltiples columnas.
Sintaxis de ORDER BY
SELECT column_name1, column_name2, column_name3.... FROM table_nameWHERE Condition ORDER BY column_name1, column_name2, .... (ASC OR DESC);
Aquí se utiliza ASC para ordenar de forma ascendente y DESC para ordenar de forma descendente.
Ejemplo de cláusula ORDER BY de SQL
Digamos que tenemos una tabla «STUDENT» con los siguientes registros.
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10001 | Kate | 22 | CSE | Mumbai || 10002 | Richard | 21 | ECE | Delhi || 10003 | Rick | 33 | ME | Chennai || 10004 | Peter | 26 | CSE | Delhi || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur |+---------+----------+-----+-----------+----------+
La siguiente sentencia SQL obtendrá todos los registros de la tabla «STUDENT» y las filas devueltas estarán en orden ascendente de la edad del estudiante.
SELECT * FROM STUDENTORDER BY AGE;
Nota: El orden por defecto de ordenación es ascendente por lo que las filas se ordenarán en base a la columna «AGE», aunque no hayamos utilizado la palabra clave ASC en la cláusula order by. Así que es seguro decir que la siguiente consulta es igual que la consulta anterior y obtendría el mismo resultado.
SELECT * FROM STUDENTORDER BY AGE ASC;
Resultado:
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10002 | Richard | 21 | ECE | Delhi || 10001 | Kate | 22 | CSE | Mumbai || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur || 10004 | Peter | 26 | CSE | Delhi || 10003 | Rick | 33 | ME | Chennai |+---------+----------+-----+-----------+----------+
SQL ORDER BY DESC ejemplo
Tabla: ESTUDIANTE
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10001 | Kate | 22 | CSE | Mumbai || 10002 | Richard | 21 | ECE | Delhi || 10003 | Rick | 33 | ME | Chennai || 10004 | Peter | 26 | CSE | Delhi || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur |+---------+----------+-----+-----------+----------+
La siguiente sentencia SQL obtendrá los nombres de los estudiantes de la tabla «ESTUDIANTE» y los nombres devueltos se ordenarán de forma descendente (hemos utilizado DESC para orden descendente en la cláusula ORDER BY).
SELECT NAME FROM STUDENTORDER BY NAME DESC;
Resultado:
+----------+| NAME | +----------+| Steve | | Rick | | Richard | | Peter | | Mark | | Kate | | Brad | +----------+
Como puedes ver, hemos obtenido una lista de nombres de estudiantes ordenados de forma descendente.
SQL ORDER BY Multiple Columns
En los ejemplos anteriores, hemos realizado la ordenación basándonos en una sola columna. Sin embargo, podemos utilizar múltiples columnas en la cláusula ORDER BY.
Cuando se utilizan múltiples columnas en ORDER BY, primero las filas se ordenarán en base a la primera columna y luego por la segunda. Tomemos un ejemplo para entender esto.
Tabla: EMPLEADO
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1001 Paul India Noida 2013101005 Raul India Agra 2831261002 Ajeet India Noida 2013011003 Jon India Agra 2820081006 David India Agra 2820051004 Chetan India Noida 201313
Ordenando las filas en base a la ciudad primero y luego por código pin dentro de cada ciudad:
SELECT * FROM EMPLOYEEORDER BY CITY, PINCODE;
Resultado:
Como puedes ver las filas se ordenan por CIUDAD y luego dentro de la ciudad se ordenan por código pin.
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1006 David India Agra 2820051003 Jon India Agra 2820081005 Raul India Agra 2831261002 Ajeet India Noida 2013011001 Paul India Noida 2013101004 Chetan India Noida 201313
Ordenando las filas en base a la ciudad primero en orden ascendente y luego por código pin en orden descendente dentro de cada ciudad:
SELECT * FROM EMPLOYEEORDER BY CITY ASC, PINCODE DESC;
Resultado:
Como puedes ver las filas están ordenadas por CIUDAD en orden ascendente y luego dentro de la ciudad ordenadas en orden inverso por código pin.
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1005 Raul India Agra 2831261003 Jon India Agra 2820081006 David India Agra 2820051004 Chetan India Noida 2013131001 Paul India Noida 2013101002 Ajeet India Noida 201301