English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderá cómo ordenar los datos devueltos por una consulta SQL SELECT.
Por lo general, cuando utiliza una sentencia SELECT para obtener datos de una tabla, las filas en el conjunto de resultados no tienen un orden específico. Si desea ordenar el conjunto de resultados de manera específica, puede especificar la cláusula ORDER BY al final de la sentencia, que indica al programa cómo ordenar los datos devueltos por la consulta. El orden de clasificación predeterminado es ascendente.
Sintaxis ORDER BY
SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;
Aquí,column_listes la tabla de base de datos de la que se debe obtener su valornombre,edad,paísetc. columnas/del camponombreycolumn_nameEs el nombre de la columna que se debe ordenar. Veamos algunos ejemplos para demostrar cómo funciona en la práctica.
Considerando que en la base de datos tenemosemployeescon los siguientes registros:
+--------+--------------+------------+--------+---------+ emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 Ethan Hunt | 2001-05-01 | 5000 | 4 | | 2 Tony Montana | 2002-07-15 | 6500 | 1 | | 3 Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 Rick Deckard | 2007-01-03 | 7200 | 3 | | 5 Martin Blank | 2008-06-24 | 5600 | NULL | +--------+--------------+------------+--------+---------+
La siguiente sentencia SQL extraerá deemployeesDevuelve todos los employee en la tabla y los ordena poremp_namepara ordenar el conjunto de resultados por la columna
SELECT * FROM employees ORDER BY emp_name ASC;
Puede omitir la opción ASC y usar la siguiente sintaxis. Esto devuelve el mismo conjunto de resultados que la última sentencia, porque el ordenamiento predeterminado de SQL es ascendente:
SELECT * FROM employees ORDER BY emp_name;
Después de ejecutar el comando anterior, obtendrá el siguiente resultado:
+--------+--------------+------------+--------+---------+ emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 Ethan Hunt | 2001-05-01 | 5000 | 4 | | 5 Martin Blank | 2008-06-24 | 5600 | NULL | | 4 Rick Deckard | 2007-01-03 | 7200 | 3 | | 3 Sarah Connor | 2005-10-18 | 8000 | 5 | | 2 Tony Montana | 2002-07-15 | 6500 | 1 | +--------+--------------+------------+--------+---------+
Del mismo modo, puede usar la opción DESC para ejecutar el ordenamiento en orden descendente. La siguiente sentencia ordenará por númeroSalarioresultado de ordenamiento descendente por la columna (salary).
SELECT * FROM employees ORDER BY salary DESC;
Esta vez, obtendrá el siguiente conjunto de resultados:
+--------+--------------+------------+--------+---------+ emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 3 Sarah Connor | 2005-10-18 | 8000 | 5 | | 4 Rick Deckard | 2007-01-03 | 7200 | 3 | | 2 Tony Montana | 2002-07-15 | 6500 | 1 | | 5 Martin Blank | 2008-06-24 | 5600 | NULL | | 1 Ethan Hunt | 2001-05-01 | 5000 | 4 | +--------+--------------+------------+--------+---------+
También puede especificar múltiples columnas para el ordenamiento. Sin embargo, a menos que haya algunos valores repetidos en la tabla, los cambios en el conjunto de resultados no serán visibles. Bueno, vamos a encontrar:
Para entender mejor el ordenamiento de múltiples columnas, supongamos que en la base de datos tenemos una tabla llamadaEntrenadorescon los siguientes registros:
+----+------------+------------+-------------+--------+ id | first_name | last_name | birth_date | gender | +----+------------+------------+-------------+--------+ | 1 | Peter | Parker | 1998-03-04 | M | | 2 Harry | Potter | 2001-08-30 | M | | 3 | Peter | Pan | 2004-09-19 | M | | 4 Alice | Kingsleigh | 1999-07-02 F | | 5 | John | Connor | 2002-01-15 | M | +----+------------+------------+-------------+--------+
Si observa atentamente la tabla, notará que tenemos algunos valores repetidos. Sin embargo, los entrenadores Peter Parker y Peter Pan tienen nombres completos diferentes, pero los nombres son iguales.
Ejecutando la siguiente orden, el resultado será ordenado porfirst_namepara ordenar el conjunto de resultados porOrdenar.
SELECT * FROM trainees ORDER BY first_name;
Después de ejecutar, obtendrá el siguiente resultado:
+----+------------+------------+-------------+--------+ id | first_name | last_name | birth_date | gender | +----+------------+------------+-------------+--------+ | 4 Alice | Kingsleigh | 1999-07-02 F | | 2 Harry | Potter | 2001-08-30 | M | | 5 | John | Connor | 2002-01-15 | M | | 1 | Peter | Parker | 1998-03-04 | M | | 3 | Peter | Pan | 2004-09-19 | M | +----+------------+------------+-------------+--------+
Ejecutando esta sentencia, el resultado será ordenado porfirst_nameylast_namepara ordenar el conjunto de resultados porOrdenar.
SELECT * FROM trainees ORDER BY first_name, last_name;
+----+------------+------------+-------------+--------+ id | first_name | last_name | birth_date | gender | +----+------------+------------+-------------+--------+ | 4 Alice | Kingsleigh | 1999-07-02 F | | 2 Harry | Potter | 2001-08-30 | M | | 5 | John | Connor | 2002-01-15 | M | | 3 | Peter | Pan | 2004-09-19 | M | | 1 | Peter | Parker | 1998-03-04 | M | +----+------------+------------+-------------+--------+
¿Has notado la diferencia entre el conjunto de resultados anterior y el actual?-Esta vez, el registro del estudiante 'Peter Parker' sigue al 'Peter Pan'.
Dado que los nombres de los dos entrenadores son 'Peter', en las dos tablas de entrenadoreslast_nameLa columna realiza el ordenamiento de segundo nivel, por lo que los registros del entrenador 'Peter Parker' siguen al 'Peter Pan'.
Nota:Cuando se especifican múltiples columnas de ordenación, el conjunto de resultados se ordena primero por la primera columna, luego se ordena por la segunda columna en la lista ordenada, y así sucesivamente.