Introdução à cláusula ORDER BY no PostgreSQL

Quando você consulta dados de uma tabela, a instrução SELECT retorna linhas em uma ordem não especificada. Para classificar as linhas do conjunto de resultados, você usa a ORDER BY cláusula na instrução SELECT.

A cláusula ORDER BY permite classificar as linhas retornadas por uma cláusula  SELECT em ordem crescente ou decrescente com base em uma expressão de classificação.

O seguinte sintaxe ilustra a cláusula ORDER BY :

 SELECT 
	lista_do_select
 FROM 
	nome_da_tabela
 ORDER   BY 
	Expressão_de_classificação [ ASC  |  DESC ],
        ...
	Expressão_de_classificação [ ASC  |  DESC ];

Nesta sintaxe:

  • Primeiro, especifique uma expressão de classificação, que pode ser uma coluna ou uma expressão, que você deseja classificar após as palavras – chave ORDER BY. Se você deseja classificar o conjunto de resultados com base em várias colunas ou expressões, você precisa colocar uma vírgula ( ,) entre duas colunas ou expressões para separá-las.
  • Em segundo lugar, você usa a opção  ASC para classificar as linhas em ordem crescente e a opção DESC de classificar as linhas em ordem decrescente. Se você omitir a opção ASC ou DESC, o ORDER BY usa ASC por padrão.

PostgreSQL avalia as cláusulas do SELECT na seguinte ordem: FROMSELECT, e ORDER BY:

Devido à ordem de avaliação, se você tiver um alias de coluna na cláusula SELECT, poderá usá-lo na cláusula ORDER BY.

Vamos dar alguns exemplos de uso da cláusula ORDER BY  no PostgreSQL .

Exemplos de ORDER BY no PostgreSQL

Usaremos a tabela clientes no banco de dados de amostra para a demonstração.

1) Usando a cláusula ORDER BY no PostgreSQL para classificar linhas por uma coluna

A consulta a seguir usa a cláusula ORDER BY para classificar os clientes por seus nomes em ordem crescente:

 SELECT 
	primeiro_nome,
	ultimo_nome
 FROM 
	clientes
 ORDER   BY 
	primeiro_nome  ASC ;

Como a opção ASC é o padrão, você pode omiti-la na cláusula ORDER BY como esta:

 SELECT 
	primeiro_nome,
	ultimo_nome
 FROM 
	clientes
 ORDER   BY 
	primeiro_nome;

2) Usando a cláusula ORDER BY no PostgreSQL para classificar as linhas por uma coluna em ordem decrescente

A instrução a seguir seleciona o nome e o sobrenome da tabela clientes e classifica as linhas por valores na coluna do sobrenome em ordem decrescente:

 SELECT 
       primeiro_nome,
       ultimo_nome
 FROM 
       clientes
 ORDER   BY 
       ultimo_nome  DESC ;

3) Usando a cláusula ORDER BY no PostgreSQL para classificar linhas por várias colunas

A instrução a seguir seleciona o nome e o sobrenome da tabela do cliente e classifica as linhas pelo nome em ordem crescente e o sobrenome em ordem decrescente:

 SELECT 
	primeiro_nome,
	ultimo_nome
 FROM 
	clientes
 ORDER   BY 
	primeiro_nome  ASC ,
	ultimo_nome  DESC ;

Neste exemplo, a cláusula ORDER BY classifica as linhas por valores na primeira coluna de nome. E então ele classifica as linhas classificadas por valores na coluna de sobrenome.

Como você pode ver claramente na saída, dois clientes com o mesmo nome Kellytêm o sobrenome classificado em ordem decrescente.

4) Usando a cláusula ORDER BY no PostgreSQL para classificar linhas por expressões

A função LENGTH() aceita uma string e retorna o comprimento dessa string.

A declaração a seguir seleciona os primeiros nomes e seus comprimentos. Ele classifica as linhas pelo comprimento dos primeiros nomes:

 SELECT  
	primeiro_nome,
	 LENGTH (primeiro_nome)  len 
 FROM 
	clientes
 ORDER   BY  
	 len   DESC ;

Como a cláusula ORDER BY é avaliada após a cláusula SELECT, o alias da coluna len está disponível e pode ser usado na cláusula ORDER BY.

Cláusula ORDER BY do PostgreSQL e NULL

No mundo do banco de dados, NULLé um marcador que indica os dados ausentes ou os dados são desconhecidos no momento da gravação.

Ao classificar linhas que contêm NULL, você pode especificar a ordem de outros valores NULL não nulos usando a opção NULLS FIRST ou NULLS LAST da cláusula ORDER BY :

 ORDER   BY   expressão_de_classificação  [ASC | DESC] [NULLS FIRST | NULLS LAST]

A opção NULLS FIRST é colocada antes de outros valores não nulos e a opção NULL LAST é colocada após outros valores não nulos.

Vamos criar uma tabela para a demonstração.

-- criando nova tabela
 CREATE   TABLE  demo_ordenacao(
	 num  INT
);

-- inserir alguns dados
 INSERT   INTO  demo_ordenacao( num )
 VALUES (1),(2),(3),(null);

Observe que você não precisa entender as instruções CREATE TABLEINSERT. Você só precisa executá-lo pgAdmin ou psql e criar a tabela e inserir dados nela.

A consulta a seguir retorna dados da tabela demo_ordenacao:

 SELECT   num 
 FROM  demo_ordenacao
 ORDER   BY   num ;

Neste exemplo, a cláusula ORDER BY classifica os valores na coluna num da tabela demo_ordenacao em ordem crescente. Coloca depois NULL de outros valores.

Portanto, se você usar a opção ASC, a cláusula ORDER BY usará a opção NULLS LAST por padrão. Portanto, a seguinte consulta retorna o mesmo resultado:

 SELECT   num 
 FROM  demo_ordenacao
 ORDER   BY   num   NULLS   LAST ;

Para colocar NULLantes de outros valores não nulos, você usa a opção NULLS FIRST:

 SELECT   num 
 FROM  demo_ordenacao
 ORDER   BY   num   NULLS   FIRST ;

A instrução a seguir classifica os valores na coluna num da tabela demor_ordenacao em ordem decrescente:

 SELECT   num 
 FROM  demo_ordenacao
 ORDER   BY   num   DESC ;

Como você pode ver claramente na saída, a cláusula ORDER BY com a opção DESC usa o por padrão NULLS FIRST.

Para inverter a ordem, você pode usar a opção NULLS LAST:

 SELECT   num 
 FROM  demo_ordenacao
 ORDER   BY   num   DESC   NULLS   LAST ;

Deixe um comentário

O seu endereço de e-mail não será publicado.