Cláusula ORDER BY en SQL
La instrucción SELECT obtiene filas de las tablas sin ningún orden en particular. ¿Cómo clasifica los datos obtenidos de la forma deseada? Puede utilizar la cláusula ORDER BY para ordenar los datos según una o más columnas.
Supongamos que está obteniendo la lista de nombres de la tabla de empleados. El siguiente SQL nos lo consigue.
SELECCIONAR * de los empleados;
| emp_no | Fecha de nacimiento | nombre de pila | apellido | género | fecha de contratación |
|---|---|---|---|---|---|
| 264902 | 1958-10-19 | Zeljko | Zweizig | F | 1995-10-15 |
| 15427 | 1959-03-06 | Aluzio | Aamodt | METRO | 1985-03-03 |
| 10695 | 30 de agosto de 1962 | Zorica | Acton | METRO | 1989-08-05 |
| 217764 | 1954-09-26 | Ingmar | Massonet | METRO | 1986-03-31 |
| 412953 | 1952-07-25 | Frederique | Swist | F | 1988-04-07 |
| 27188 | 1959-02-16 | Vasilii | Aamodt | F | 1996-10-12 |
| 239655 | 1962-02-22 | Luise | Bhattacharjee | METRO | 1997-10-29 |
| 44673 | 1963-05-31 | Kensei | Brookman | F | 1986-01-31 |
| 76392 | 15/12/1959 | Cristinel | Acton | F | 1996-09-22 |
| 294136 | 1953-01-10 | Oguz | Zweizig | METRO | 1989-10-26 |
| 237184 | 1964-12-08 | JoAnne | Swist | METRO | 1991-07-21 |
Con una columna en la cláusula ORDER BY
Es posible que desee que la lista de empleados esté ordenada por su apellido en orden ascendente. Lo que esto significa es que los apellidos están ordenados de la A a la Z, con los apellidos que comienzan con una A apareciendo primero, abajo hasta la Z, que aparecerá al final. El orden ascendente es el orden predeterminado que se supone en cada columna que desea ordenar. Puede especificar esto explícitamente agregando la palabra clave ASC después del nombre de la columna, pero esto es opcional.
Encontrar constantes de velocidad y ordenar reacciones: gráfico y ley de velocidad
SELECCIONAR * de empleados ORDER BY last_name;
o, de manera similar,
SELECCIONAR * de empleados ORDENAR POR apellido ASC;
| emp_no | Fecha de nacimiento | nombre de pila | apellido | género | fecha de contratación |
|---|---|---|---|---|---|
| 15427 | 1959-03-06 | Aluzio | Aamodt | METRO | 1985-03-03 |
| 27188 | 1959-02-16 | Vasilii | Aamodt | F | 1996-10-12 |
| 10695 | 30 de agosto de 1962 | Zorica | Acton | METRO | 1989-08-05 |
| 76392 | 15/12/1959 | Cristinel | Acton | F | 1996-09-22 |
| 239655 | 1962-02-22 | Luise | Bhattacharjee | METRO | 1997-10-29 |
| 44673 | 1963-05-31 | Kensei | Brookman | F | 1986-01-31 |
| 217764 | 1954-09-26 | Ingmar | Massonet | METRO | 1986-03-31 |
| 237184 | 1964-12-08 | JoAnne | Swist | METRO | 1991-07-21 |
| 412953 | 1952-07-25 | Frederique | Swist | F | 1988-04-07 |
| 264902 | 1958-10-19 | Zeljko | Zweizig | F | 1995-10-15 |
| 294136 | 1953-01-10 | Oguz | Zweizig | METRO | 1989-10-26 |
¿Qué pasa si queremos que los apellidos que comienzan con una Z aparezcan primero en la lista y aquellos con una A aparezcan al final? Esto está en orden descendente y para ordenar en función del apellido en orden descendente usaremos la palabra clave DESC.
SELECCIONAR * de los empleados ORDER BY last_name DESC;
| emp_no | Fecha de nacimiento | nombre de pila | apellido | género | fecha de contratación |
|---|---|---|---|---|---|
| 264902 | 1958-10-19 | Zeljko | Zweizig | F | 1995-10-15 |
| 294136 | 1953-01-10 | Oguz | Zweizig | METRO | 1989-10-26 |
| 237184 | 1964-12-08 | JoAnne | Swist | METRO | 1991-07-21 |
| 412953 | 1952-07-25 | Frederique | Swist | F | 1988-04-07 |
| 217764 | 1954-09-26 | Ingmar | Massonet | METRO | 1986-03-31 |
| 44673 | 1963-05-31 | Kensei | Brookman | F | 1986-01-31 |
| 239655 | 1962-02-22 | Luise | Bhattacharjee | METRO | 1997-10-29 |
| 10695 | 30 de agosto de 1962 | Zorica | Acton | METRO | 1989-08-05 |
| 76392 | 15/12/1959 | Cristinel | Acton | F | 1996-09-22 |
| 15427 | 1959-03-06 | Aluzio | Aamodt | METRO | 1985-03-03 |
| 27188 | 1959-02-16 | Vasilii | Aamodt | F | 1996-10-12 |
Con varias columnas en la cláusula ORDER BY
¿Qué pasa si queremos ordenar los nombres además de los apellidos? Simplemente podemos especificar esto agregando la columna de nombre después del apellido. Lo que hace esto es que los apellidos se ordenarán en orden ascendente y si los apellidos de dos o más filas son iguales, entonces los nombres de esas filas se ordenarán en orden ascendente. Tenga en cuenta que en el conjunto de resultados a continuación tiene los nombres ordenados en orden ascendente para los apellidos Aamodt, Acton, Swist y Zweizig.
Ataque de inyección SQL: definición, tipos y ejemplos
SELECCIONAR * de empleados ORDER BY last_name, first_name;
| emp_no | Fecha de nacimiento | nombre de pila | apellido | género | fecha de contratación |
|---|---|---|---|---|---|
| 15427 | 1959-03-06 | Aluzio | Aamodt | METRO | 1985-03-03 |
| 27188 | 1959-02-16 | Vasilii | Aamodt | F | 1996-10-12 |
| 76392 | 15/12/1959 | Cristinel | Acton | F | 1996-09-22 |
| 10695 | 30 de agosto de 1962 | Zorica | Acton | METRO | 1989-08-05 |
| 239655 | 1962-02-22 | Luise | Bhattacharjee | METRO | 1997-10-29 |
| 44673 | 1963-05-31 | Kensei | Brookman | F | 1986-01-31 |
| 217764 | 1954-09-26 | Ingmar | Massonet | METRO | 1986-03-31 |
| 412953 | 1952-07-25 | Frederique | Swist | F | 1988-04-07 |
| 237184 | 1964-12-08 | JoAnne | Swist | METRO | 1991-07-21 |
| 294136 | 1953-01-10 | Oguz | Zweizig | METRO | 1989-10-26 |
| 264902 | 1958-10-19 | Zeljko | Zweizig | F | 1995-10-15 |
Ahora, ordenemos el apellido en orden descendente y el nombre en orden ascendente.
SELECCIONAR * de empleados ORDER BY last_name DESC, first_name;
| emp_no | Fecha de nacimiento | nombre de pila | apellido | género | fecha de contratación |
|---|---|---|---|---|---|
| 294136 | 1953-01-10 | Oguz | Zweizig | METRO | 1989-10-26 |
| 264902 | 1958-10-19 | Zeljko | Zweizig | F | 1995-10-15 |
| 412953 | 1952-07-25 | Frederique | Swist | F | 1988-04-07 |
| 237184 | 1964-12-08 | JoAnne | Swist | METRO | 1991-07-21 |
| 217764 | 1954-09-26 | Ingmar | Massonet | METRO | 1986-03-31 |
| 44673 | 1963-05-31 | Kensei | Brookman | F | 1986-01-31 |
| 239655 | 1962-02-22 | Luise | Bhattacharjee | METRO | 1997-10-29 |
| 76392 | 15/12/1959 | Cristinel | Acton | F | 1996-09-22 |
| 10695 | 30 de agosto de 1962 | Zorica | Acton | METRO | 1989-08-05 |
| 15427 | 1959-03-06 | Aluzio | Aamodt | METRO | 1985-03-03 |
| 27188 | 1959-02-16 | Vasilii | Aamodt | F | 1996-10-12 |
Con números de columna posicionales en la cláusula ORDER BY
La mayoría de los motores de base de datos también le permiten especificar las columnas en una cláusula ORDER BY utilizando números de posición. Por lo tanto, en lugar de escribir los nombres de las columnas en la cláusula ORDER BY, podemos escribir la posición numérica de la columna que queremos ordenar seguida de la palabra clave ASC / DESC. La consulta anterior también se puede reescribir en el siguiente formato para dar los mismos resultados, ya que la cuarta columna es la columna last_name y la tercera columna es la columna first_name.
SELECT emp_no, birth_date, first_name, last_name, gender, Hire_date de los empleados ORDER BY 4 DESC, 3;
Con nombres de columna en la cláusula ORDER BY que no forman parte de la instrucción SELECT
Muchos motores de base de datos le permiten ordenar los datos en función de columnas o expresiones que no forman parte de las columnas seleccionadas (conjunto de resultados). Podríamos escribir una consulta para ver si funciona de la siguiente manera. La consulta devolverá los resultados ordenados en orden ascendente de la fecha de contratación del empleado, con la fecha de contratación más antigua primero en la lista y la fecha de contratación más reciente que aparece en último lugar en la lista.
SELECCIONE emp_no, first_name, last_name de los empleados ORDER BY Hire_date;
| emp_no | nombre de pila | apellido |
|---|---|---|
| 15427 | Aluzio | Aamodt |
| 44673 | Kensei | Brookman |
| 217764 | Ingmar | Massonet |
| 412953 | Frederique | Swist |
| 10695 | Zorica | Acton |
| 294136 | Oguz | Zweizig |
| 237184 | JoAnne | Swist |
| 264902 | Zeljko | Zweizig |
| 76392 | Cristinel | Acton |
| 27188 | Vasilii | Aamodt |
| 239655 | Luise | Bhattacharjee |
Puede comprobar por sí mismo que el orden en el conjunto de resultados anterior es correcto emitiendo la misma consulta que también muestra la columna Hire_date.
SELECCIONE emp_no, first_name, last_name, Hire_date de los empleados ORDER BY Hire_date;
| emp_no | nombre de pila | apellido | fecha de contratación |
|---|---|---|---|
| 15427 | Aluzio | Aamodt | 1985-03-03 |
| 44673 | Kensei | Brookman | 1986-01-31 |
| 217764 | Ingmar | Massonet | 1986-03-31 |
| 412953 | Frederique | Swist | 1988-04-07 |
| 10695 | Zorica | Acton | 1989-08-05 |
| 294136 | Oguz | Zweizig | 1989-10-26 |
| 237184 | JoAnne | Swist | 1991-07-21 |
| 264902 | Zeljko | Zweizig | 1995-10-15 |
| 76392 | Cristinel | Acton | 1996-09-22 |
| 27188 | Vasilii | Aamodt | 1996-10-12 |
| 239655 | Luise | Bhattacharjee | 1997-10-29 |
Resumen
La cláusula ORDER BY le permite ordenar el resultado de una consulta SQL en orden ascendente (predeterminado) o descendente. Puede ordenar en una o más columnas especificando los nombres o posiciones de las columnas en la cláusula ORDER BY. También puede ordenar el conjunto de resultados según una o más columnas que no forman parte del conjunto de resultados.
Explora más sobre este tema
Selecciona un tema y sigue aprendiendo...
