English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Conjunto ORDER BY do SQL

Neste tutorial, você aprenderá como ordenar os dados retornados por consultas SQL SELECT.

Ordenação do conjunto de resultados

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.

Sintaxe

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 |
+--------+--------------+------------+--------+---------+

Ordenação de uma coluna

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 |
+--------+--------------+------------+--------+---------+

Ordenação de várias colunas

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.