ORDER BY organiza os resultados de acordo com uma ou mais colunas da tabela, podendo definir a ordem do resultados como crescente ou decrescente.

Caso a ordem não seja declarada, será crescente (ASC), por padrão.

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 email
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
Tabela 1. Estrutura da tabela aluno

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 email
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
Tabela 2. Resultado da consulta ordenada pelo nome

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 email
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
Tabela 3. Resultado da consulta

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 email
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
Tabela 4. Resultado da consulta

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
Tabela 5. Tabela pessoa

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
Tabela 6. Resultado da consulta ordenada por nome e data de nascimento

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