English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como ordenar os dados retornados por consultas SQL SELECT.
Normalmente, quando você usa a declaração SELECT para obter dados da tabela, as linhas do conjunto de resultados não têm uma ordem específica. Se você desejar ordenar o conjunto de resultados de acordo com uma ordem específica, você pode especificar a cláusula ORDER BY no final da declaração, que informa ao programa como ordenar os dados retornados pela consulta. A ordem de classificação padrão é ascendente.
Conjunto ORDER BY
SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;
Aqui,column_listé a tabela de banco de dados cujo valor precisamos obternome,idade,paíse outras colunas/do camponomeecolumn_nameÉ o nome da coluna a ser ordenada. Vamos ver alguns exemplos para demonstrar como isso funciona na prática.
Considere que temos umemployeesA tabela, que possui os seguintes 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 | +--------+--------------+------------+--------+---------+
A seguinte instrução SQL será executada na tabelaemployeesA tabela retorna todos os employee, ordenados poremp_namerealiza a ordenação ascendente nas colunas do conjunto de resultados.
SELECT * FROM employees ORDER BY emp_name ASC;
Você pode omitir a opção ASC e usar a seguinte sintaxe. Ela retorna o mesmo conjunto de resultados da instrução anterior, pois a ordem de classificação padrão do SQL é ascendente:
SELECT * FROM employees ORDER BY emp_name;
Após executar o comando acima, você obterá o seguinte 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 | +--------+--------------+------------+--------+---------+
Da mesma forma, você pode usar a opção DESC para executar a ordenação em ordem decrescente. A seguinte instrução ordenaSalárioresultados de ordenação decrescente pela coluna (salary).
SELECT * FROM employees ORDER BY salary DESC;
Agora, você obterá o seguinte 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 | +--------+--------------+------------+--------+---------+
Você também pode especificar várias colunas na ordenação. No entanto, a menos que a tabela contenha alguns valores repetidos, as mudanças no conjunto de resultados não serão visíveis. Então, vamos descobrir:
Para entender melhor a ordenação de várias colunas, suponhamos que temos um banco de dados com uma tabela chamadaTraineesda tabela, contendo os seguintes 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 | +----+------------+------------+-------------+--------+
Se você olhar atentamente para a tabela, perceberá que temos alguns valores repetidos. No entanto, os treinadores Peter Parker e Peter Pan têm nomes completos diferentes, mas nomes iguais.
Agora execute o seguinte comando, o qual ordenafirst_namerealiza uma ordenação nas colunas do conjunto de resultadosOrdenação.
SELECT * FROM trainees ORDER BY first_name;
Após a execução, você obterá o seguinte 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 | +----+------------+------------+-------------+--------+
Agora execute esta instrução, a qual ordenafirst_nameelast_namerealiza uma ordenação nas colunas do conjunto de resultadosOrdenação.
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 | +----+------------+------------+-------------+--------+
Você notou a diferença entre o conjunto de resultados anterior e o atual?-Nesta vez, o registro do aluno “Peter Parker” seguiu imediatamente após o “Peter Pan”.
Devido aos dois treinadores terem o nome “Peter”, nestes dois treinadoreslast_nameA coluna é executada em segundo nível de ordenação,这就是为什么训练员“Peter Parker”的记录在“Peter Pan”之后。
Atenção:Quando várias colunas de ordenação são especificadas, o conjunto de resultados é ordenado primeiro pelo primeiro campo, em seguida, pelo segundo campo da lista ordenada, e assim por diante.