ORDER BY organiza os resultados de acordo com uma ou mais colunas da tabela, podendo definir a ordem do resultados como crescente ou decrescente.
Visão geral
A ordenação dos resultados de uma consulta pode ser super útil não só para a exibição em si do seu resultado ordenado de forma ascendente ou decrescente, mas até mesmo para utilizar em conjunto a funções de limiteção de resultados para obter o maior ou menor valor de uma determinada consulta.
Para este exemplo considere a tabela aluno (Tabela 1), responsável por armazenar a informação de todos os alunos da instituição.
id | nome | |
1 | João Fernando | joao@gmail.com |
2 | Maria Carvalho | maria@gmail.com |
3 | Bruna dos Santos | bruna@gmail.com |
4 | Pedro da Silva | pedro@gmail.com |
5 | Tiago | tiago@gmail.com |
Suponhamos que seja necessário trazer na consulta todos os alunos ordenados pelo nome. Para isso, podemos utilizar o trecho de código abaixo:
SELECT
*
FROM
aluno
ORDER BY
nome
Nesta consulta solicitamos todos resultados da tabela, em seguida pedimos para que o resultado seja ordenado pelo nome. Na linha 2 utilizamos o caractere asterisco (*) para solicitar que todas as colunas da tabela retornassem no resultado da consulta gerando o resultado apresentado na Tabela 2.
id | nome | |
3 | Bruna dos Santos | bruna@gmail.com |
1 | João Fernando | joao@gmail.com |
2 | Maria Carvalho | maria@gmail.com |
4 | Pedro da Silva | pedro@gmail.com |
5 | Tiago | tiago@gmail.com |
Observe que no resultado acima, as informações foram ordenadas de forma ascendente, ou seja, ao não informar o parâmetro de ordenação, por padrão o valor ASC é acionado.
Sintaxe
SELECT
[ coluna1, coluna2, ... | * ]
FROM
[ tabela ]
ORDER BY
[ coluna1, coluna2 ] [ DESC | ASC ]
Na prática
Exemplo 1
Podemos ordenar os resultados da consulta por qualquer coluna, como por exemplo pelo id do aluno; Neste exemplo o resultado será ordenado de forma ascendente, utilizando a opção ASC em conjunto ao ORDER BY:
SELECT
*
FROM
aluno
ORDER BY
id ASC
Na linha 2 da consulta utilizamos o caractere asterisco (*) para solicitar que todas as colunas da tabela retornassem no resultado da consulta gerando o resultado na Tabela 3.
id | nome | |
1 | João Fernando | joao@gmail.com |
2 | Maria Carvalho | maria@gmail.com |
3 | Bruna dos Santos | bruna@gmail.com |
4 | Pedro da Silva | pedro@gmail.com |
5 | Tiago | tiago@gmail.com |
Exemplo 2
Neste exemplo, faremos a mesma consulta do exemplo anterior, poré o resultado sera colocado em ordem decrescente utilizando a opção DESC como no exemplo abaixo:
SELECT
*
FROM
aluno
ORDER BY
id DESC
Note que na linha 2 utilizamos o caractere asterisco (*) para solicitar que todas as colunas da tabela retornem no resultado da consulta, e logo no fim, agrupamos o resultado pelo ID do aluno de forma DESC, ou seja, do maior para o menor, gerando o resultado na Tabela 4.
Id | nome | |
5 | Tiago | tiago@gmail.com |
4 | Pedro da Silva | pedro@gmail.com |
3 | Bruna dos Santos | bruna@gmail.com |
2 | Maria Carvalho | maria@gmail.com |
1 | João Fernando | joao@gmail.com |
Note que no resultado da consulta todas as colunas da tabela retornaram em ordem decrescente como definido no ORDER BY.
Exemplo 3
A cláusula ORDER BY permite que a ordenação seja feita por mais de uma coluna.
Para este exemplo, considere a estrutura de tabela abaixo:
nome | data_nascimento |
Bruno Henrique | 2000-01-01 |
Pedro Pereira | 2001-10-01 |
Fernando Luiz | 1999-02-03 |
Luana Pereira | 2005-01-30 |
Bruno Henrique | 1970-07-09 |
Alan Dias | 1963-04-01 |
Michele Braga | 1999-11-01 |
Com os dados da tabela acima, iremos retornar uma consulta onde o resultado será ordenado tanto pelo nome quanto pela data de nascimento. Para isso podemos utilizar o trecho de código abaixo:
SELECT
nome,
data_nascimento
FROM
pessoa
ORDER BY
nome,
data_nascimento;
Conforme podemos ver, no trecho de código acima pedimos na consulta o nome e a data de nascimento de todos os registros da tabela pessoa, e em seguida pedimos para ordenar o resultado começando pelo nome e em seguida pela data de nascimento. O resultado da query pode ser visto abaixo na Tabela 6.
nome | data_nascimento |
Alan Dias | 1963-04-01 |
Bruno Henrique | 1970-07-09 |
Bruno Henrique | 2000-01-01 |
Fernando Luiz | 1999-02-03 |
Luana Pereira | 2005-01-30 |
Michele Braga | 1999-11-01 |
Pedro Pereira | 2001-10-01 |
Observe no resultado acima, que primeiro a consulta foi ordenada por nome, e em seguida por data de nascimento.
Saiba mais Veja a Série SQL nível Jedi: Subqueries