Por que eu devo ler este artigo:Quando retornamos dados através de uma consulta, nem sempre a ordem em que os dados são apresentados é a ideal, pois eles podem vir misturados, gerando um trabalho adicional para ordená-los. Evitamos esse trabalho quando combinamos o comando SELECT com a cláusula ORDER BY, que ordena os dados por uma ou mais colunas da tabela. Vamos conhecer a sintaxe de ORDER BY e as opções de ordenação que podemos usar nas consultas.

Um negócio pode gerar muitos dados, que serão úteis de acordo com a forma em que são apresentados. Como exemplo, temos uma loja que registra suas vendas em uma tabela chamada VENDAS_DIARIAS em um banco de dados. Se observar todas as vendas de um dia na ordem em que foram gravadas pode ser difícil de entender tantos dados misturados. Esses dados precisam ser ordenados de forma a facilitar sua leitura.

Veja o resultado na Figura 1 de uma consulta a tabela VENDAS_DIARIAS.

Resultado de uma consulta a tabela VENDAS_DIARIAS
Figura 1. Resultado de uma consulta a tabela VENDAS_DIARIAS

Se a loja precisar de uma lista de produtos na ordem do mais vendido para o menos vendido, temos que mudar a ordem em que os dados são apresentados.

Saiba mais: ORDER BY

Veja na Figura 2 o resultado de uma consulta a tabela VENDAS_DIARIAS ordenada pelos produtos mais vendidos.

Resultado de uma consulta a tabela VENDAS_DIARIAS ordenada pelos
produtos mais vendidos
Figura 2. Resultado de uma consulta a tabela VENDAS_DIARIAS ordenada pelos produtos mais vendidos

O que há de diferente na segunda consulta? Ela solicita que os dados sejam ordenados pela coluna quantidade em ordem decrescente. Na linguagem SQL solicitamos uma ordenação dos dados quando acrescentamos a cláusula ORDER BY a um comando SELECT.

Nesse artigo, vamos conhecer a sintaxe do comando SELECT com a cláusula ORDER BY e as opções de ordenação disponíveis.

Sintaxe do comando SELECT com a cláusula ORDER BY

Para escrever uma query que consulte uma tabela e ordene os dados por uma ou mais colunas utilizamos a sintaxe da Listagem 1.


    SELECT [colunas] 
    FROM [nome da tabela]
    WHERE [condição]
    ORDER BY [coluna ou colunas] ASC
    -- (ASC para ordem crescente ou DESC para ordem decrescente)
  
Listagem 1. Sintaxe do comando SELECT com a cláusula ORDER BY

A cláusula ORDER BY deve ser escrita após a seleção das colunas (SELECT), a definição da tabela (FROM) e a condição(WHERE) se ela existir.

Vamos nos concentrar na linha 4 da Listagem 1 que se refere a cláusula ORDER BY.

O uso de ORDER BY basicamente está dividido em três partes:

  1. cláusula ORDER BY
  2. Uma coluna ou uma lista de colunas que serão a base da ordenação
  3. Usamos ASC para ordem crescente, do menor valor para o maior valor, ou DESC para ordem decrescente, do maior valor para o menor valor.
Quando não informamos em uma query se a ordem é ASC ou DESC, o padrão é ASC.

Ordenando por uma coluna

Como podemos consultar a tabela VENDAS_DIARIAS, e ordenar seus dados pela coluna valor_unitario? Para realizar essa consulta temos de executar a query da Listagem 2.


    SELECT id
    ,data_venda
    ,produto
    ,categoria
    ,valor_unitario
    ,quantidade
    ,valor_total
    FROM vendas_diarias
   ORDER BY valor_unitario
  
Listagem 2. Query para ordenar uma consulta a tabela VENDAS_DIARIAS pela coluna valor_unitario

Na linha 9 da Listagem 2 temos a cláusula ORDER BY e o nome da coluna valor_unitario. Não informamos o tipo da ordem ASC ou DESC, por padrão a ordem será do tipo ASC ou ordem crescente, do menor valor para o maior valor.

Veja o resultado da execução dessa query na Figura 3.

Resultado da execução da query que ordena os dados da tabela
VENDAS_DIARIAS pela coluna valor_unitario em ordem crescente
Figura 3. Resultado da execução da query que ordena os dados da tabela VENDAS_DIARIAS pela coluna valor_unitario em ordem crescente

Ordem decrescente

Como podemos consultar a tabela VENDAS_DIARIAS e ordenar seus dados pela coluna valor_total em ordem decrescente? Para realizar essa consulta temos de executar a query da Listagem 3.


    SELECT ID
   ,data_venda
    ,produto
    ,categoria
    ,valor_unitario
    ,quantidade
    ,valor_total
    FROM vendas_diarias
    ORDER BY valor_total DESC
  
Listagem 3. Query para ordenar uma consulta a tabela VENDAS_DIARIAS pela coluna “valor_total” em ordem decrescente

Na linha 9 da Listagem 3 temos a cláusula ORDER BY e o nome da coluna valor_total. Informamos o tipo da ordem como DESC, para ordem decrescente, ou seja, do maior valor para o menor valor.

Veja o resultado da execução dessa query na Figura 4.

Resultado da execução da query que ordena os dados da tabela
VENDAS_DIARIAS pela coluna valor_total em ordem decrescente
Figura 4. Resultado da execução da query que ordena os dados da tabela VENDAS_DIARIAS pela coluna valor_total em ordem decrescente

Ordenando por várias colunas

Agora, como podemos consultar a tabela VENDAS_DIARIAS e ordenar seus dados pela coluna valor_unitario em ordem decrescente e pela coluna produto em ordem crescente? Para realizar essa consulta temos de executar a query da Listagem 4.


    SELECT ID
    ,data_venda
    ,produto
    ,categoria
    ,valor_unitario
    ,quantidade
    ,valor_total
    FROM vendas_diarias
    ORDER BY valor_unitario DESC
   ,produto
  
Listagem 4. Query para ordenar uma consulta a tabela VENDAS_DIARIAS pela coluna “valor_unitario” em ordem decrescente e pela coluna “produto” em ordem crescente

Na linha 9 da Listagem 4 temos a cláusula ORDER BY e o nome da coluna valor_unitario e DESC para ordem decrescente. E na linha 10 temos a coluna produto. Como não foi definido o tipo de ordem, por padrão, a coluna produto terá ordem crescente.

Veja o resultado da execução dessa query na Figura 5.

Resultado da execução da query que ordena os dados da tabela
VENDAS_DIARIAS pela coluna valor_unitario em ordem decrescente e a coluna produto
em ordem crescente
Figura 5. Resultado da execução da query que ordena os dados da tabela VENDAS_DIARIAS pela coluna valor_unitario em ordem decrescente e a coluna produto em ordem crescente

Como vimos nesse artigo, aprendemos a criar consultas com o comando SELECT combinado a cláusula ORDER BY. Agora podemos obter os dados de nossas tabelas com diversas opções de ordem por uma ou mais tabelas.