Voltar para a lista de artigos Artigos
7 minutos de leitura

Como Ordenar Registros com a Cláusula "ORDENAR POR

As bases de dados relacionais não armazenam registros em ordem alfabética, numérica, ascendente, ou em qualquer ordem em particular. A única maneira de encomendar registros no conjunto de resultados é usar a cláusula ORDER BY. Você pode usar esta cláusula para ordenar linhas por uma coluna, uma lista de colunas ou uma expressão. Você também pode ordenar linhas usando a expressão CASE.

Neste post, daremos uma olhada na cláusula ORDER BY - como escrevê-la, como ela funciona e o que ela faz.

ENCOMENDAR POR Sintaxe

A cláusula ORDER BY é utilizada para classificar as linhas em uma tabela de resultados. Aqui está sua sintaxe:

SELECT list_column
FROM table
ORDER BY column ;

Usando ORDEM POR com uma Coluna

O exemplo abaixo mostra os registros na seção furniture_data tabela que foram classificadas em ordem ascendente de acordo com a coluna furniture. Ascendente é a ordem de classificação padrão de acordo com uma cláusula ORDER BY.

SELECT id, furniture, points
FROM furniture_data
ORDER BY furniture ;

Como você pode ver, a cláusula ORDER BY é colocada após a declaração FROM. Após a palavra-chave ORDER BY, temos a coluna ou colunas pelas quais as linhas serão ordenadas. Em outras palavras, você está dizendo ao banco de dados "Pegue as colunas id, furniture, e points da furniture_data mesa e colocá-los em ordem com base na coluna de móveis".

Você pode especificar como os resultados são classificados, seja em ordem ascendente (A-Z) ou descendente (Z-A). Para ordem ascendente, você pode usar a palavra-chave ASC, mas não é necessário. Para ordem decrescente, você deve usar a palavra-chave DESC.

Portanto, após o nome da coluna, você pode colocar a palavra-chave ASC ou DESC. O exemplo abaixo ordena os dados em ordem ascendente pela coluna "furniture":

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture ASC ;

Lembre-se, você não precisa da palavra-chave ASC para especificar uma ordem ascendente; SQL faz isso por padrão.

A seguir, veja os dados na tabela de furniture_data tabela, que utilizaremos nos demais exemplos deste artigo:

id furniture points price
1 chair 5 120
2 sofa 8 950
3 table 2 1350
4 bookcase 5 200
5 bed 3 2000

Aqui está como ela se comporta após um tipo ascendente pela coluna furniture:

id furniture points
5 bed 3
4 bookcase 5
1 chair 5
2 sofa 8
3 table 2

Que tal fazer uma espécie decrescente na mesma coluna?

SELECT id, furniture, points
FROM furniture _data
ORDER BY furniture DESC ;

Aqui está o resultado para a ordenação decrescente:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Usando o ORDER BY com Múltiplas Colunas

Os últimos exemplos ordenaram os dados usando apenas uma coluna. Entretanto, se alguns registros nesta coluna tiverem valores idênticos, isso pode afetar a forma como os resultados são mostrados. Neste caso, precisamos ordenar as linhas usando uma coluna adicional. O próximo exemplo mostra como usar mais de uma coluna para ordenar dados:

SELECT id, furniture, points
FROM furniture _data
ORDER BY point DESC , furniture;

Este exemplo ordena as linhas em ordem decrescente de acordo com a coluna points. Se dois ou mais registros tiverem o mesmo valor, o banco de dados usa a coluna furniture para ordenar estes registros em ordem ascendente.

Aqui estão os resultados:

id furniture points
2 sofa 8
4 bookcase 5
1 chair 5
5 bed 3
3 table 2

As linhas da estante e da cadeira têm o mesmo número de pontos (5), portanto estas linhas também são ordenadas pelos valores na coluna furniture. A ordenação é alfabética, portanto a estante linha é mostrada antes da cadeira linha .

Expressões na Cláusula POR ORDEM

Às vezes precisamos ordenar os registros pelo resultado de um cálculo e não pelos valores das colunas. Imagine que você gostaria de ordenar os dados recuperados do furniture_data tabela de acordo com o valor de um desconto de preço. Você calcularia o desconto multiplicando o valor na coluna points por 120, e depois dividindo-o por 100.

Eis como isto ficaria em código SQL:

SELECT id, furniture, points, price
FROM furniture _data
ORDER BY price-120*points/100;

Aqui está o resultado:

id furniture points price
1 chair 5 120
4 bookcase 5 200
2 sofa 8 950
3 table 2 1350
5 bed 3 2000

Usando o ORDER BY with CASE

Pedido pela expressão do caso

Além de classificar as linhas usando uma ou mais colunas, você também pode usar ORDER BY com expressões CASE simples e pesquisadas.(Para saber mais sobre o CASE, leia este artigo.) Por que usar CASE em uma cláusula ORDER BY? Você pode querer ser ainda mais específico sobre como as linhas são classificadas, ou pode querer recuperar apenas algumas das linhas (ou seja, aquelas que atendem a certas condições).

O exemplo abaixo mostra como usar CASE para classificar os dados de uma forma específica. Imagine que você queira recuperar os dados do furniture_data tabela, mas que você quer as linhas com um número par de pontos exibidos na parte superior dos resultados. Você não pode fazer isso usando colunas como critério de ordenação; você precisa CASE.

Abaixo está um exemplo do código relevante:

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END ;

Eis como são os resultados:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

Como a expressão CASE fez isso? Ela verificou se o número na coluna points poderia ser dividido por 2 sem um resto. Se pudesse, um 1 foi devolvido e a fila foi mostrada na parte superior dos resultados. Caso contrário, foi devolvido um 2 foi devolvido e a fila foi mostrada na parte inferior dos resultados.

Se você quiser ter os registros de móveis com um número ímpar de pontos listados primeiro, tudo que você precisa fazer é mudar a ordem de classificação para descer:

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END   DESC ;

O resultado:

id furniture points
1 chair 5
4 bookcase 5
5 bed 3
2 sofa 8
3 table 2

Pedido com CASE e uma Coluna

Você pode usar outras coisas junto com uma declaração CASE, como uma coluna ou mesmo outra expressão CASE. Veja o exemplo a seguir, que usa uma expressão CASE e uma coluna para encomendar dados.

SELECT id, furniture, points
FROM furniture _data
ORDER BY CASE 
              WHEN points%2=0  THEN 1
              ELSE 2
         END , furniture  DESC ;

Primeiro, os registros são ordenados de acordo com a expressão CASE, que verifica se os valores points são pares ou ímpares. Como antes, os números pares são listados primeiro. Mas queremos ordenar ainda mais os grupos. Portanto, usamos a coluna furniture para ordenar os resultados dentro do CASE. Como usamos a palavra-chave DESC, as linhas são listadas em ordem alfabética inversa. Aqui estão os resultados:

id furniture points
3 table 2
2 sofa 8
1 chair 5
4 bookcase 5
5 bed 3

Compare esses resultados com os abaixo, que usam apenas a expressão CASE:

id furniture points
2 sofa 8
3 table 2
1 chair 5
4 bookcase 5
5 bed 3

Deseja saber mais?

Este artigo acabou de ser iniciado com a cláusula ORDER BY. A melhor maneira de aprender mais é experimentá-la você mesmo, usando o curso SQL Queries da Academia Vertabelo.