segunda-feira, 2 de abril de 2012

Ordenando valores nulos no PostgreSQL

Salve salve papeiros.

Hoje vou demonstrar uma funcionalidade interessante que é nativa do PostgreSQL, o Nulls First e Nulss Lastcom elas é possível realizar a ordenação de consultas demonstrando os registros que não possuem informações, ou seja, nulos, no início ou no fim do resultado.

Para trabalharmos melhor o exemplo, façamos:

1º - Criação da Tabela:
 CREATE TABLE valores_nulos  
 (  
  id bigint NOT NULL,  
  nome character varying(20),  
  dt_nascimento date,  
  CONSTRAINT valores_nulos_pkey PRIMARY KEY (id )  
 )  
 WITH (  
  OIDS=FALSE  
 );  

Vejam que as colunas nome e dt_nascimento aceitam valores nulos, ao invés da coluna id que possui a condição NOT NULL.


2º - Inserindo os registros:
 Insert Into valores_nulos(id,nome,dt_nascimento)  
 Values(1,'PAPO SQL','2011-06-18')  
 ,(2,'VALOR NULO 1',NULL)  
 ,(3,'VALOR NULO 2',NULL)  
 ,(4,'VALOR NULO 3','2012-01-01')  
 ,(5,'VALOR NULO 4',NULL);  

Acima, propositalmente inseri registros nulos na coluna dt_nascimento, então temos três registros sem data de nascimento na tabela valores_nulos.

3º - Vamos montar uma simples consulta para retornar os registros armazenados:
 Select *  
 From valores_nulos;  
 id    nome           dt_nascimento  
 1     PAPO SQL       18/06/2011  
 2     VALOR NULO 1   null       
 3     VALOR NULO 2   null       
 4     VALOR NULO 3   01/01/2012  
 5     VALOR NULO 4   null       

Registrados temos VALOR NULO 12 e 4 que não possuem data de nascimento.

4º - Agora vamos realizar uma ordenação simples nesta tabela (Order By):
 Select *  
 From valores_nulos  
 Order By dt_nascimento;  
 id    nome          dt_nascimento  
 1     PAPO SQL      18/06/2011  
 4     VALOR NULO 3  01/01/2012  
 2     VALOR NULO 1       
 3     VALOR NULO 2       
 5     VALOR NULO 4       

Curiosamente a consulta apresenta os registros que possuem data primeiro do que os registros que não possuem, isto porque, por padrão todo valor nulo é considerado maior, independente do valor dos demais.

Agora vamos aplicar a ordenação destes registros de forma a apresentar nulos primeiro, ou por último, isto vai depender de cada situação.

5º - Ordenando os registros nulos por último:
 Select *  
 From valores_nulos  
 Order By dt_nascimento Nulls Last  
 id     nome         dt_nascimento  
 1     PAPO SQL      18/06/2011  
 4     VALOR NULO 3  01/01/2012  
 2     VALOR NULO 1       
 3     VALOR NULO 2       
 5     VALOR NULO 4       

Vejam que, com o uso da função os registros nulos foram apresentados ao final dos resultados.

6º - Vejamos agora a ordenação dos registros nulos primeiro:
 Select *  
 From valores_nulos  
 Order By dt_nascimento Nulls First  
 id     nome         dt_nascimento  
 2     VALOR NULO 1       
 3     VALOR NULO 2       
 5     VALOR NULO 4       
 1     PAPO SQL      18/06/2011  
 4     VALOR NULO 3  01/01/2012  

Dica simples que pode ajudar e muito naquelas situações atípicas que somos submetidos no dia a dia.

Espero mais uma vez ter sido útil, um grande abraço e até a próxima.

Material de referência:
http://www.postgresql.org/docs/8.3/static/queries-order.html
http://www.bau-de-dev.com/banco-de-dados/postgresql/alterando-ordem-dos-valores-null-utilizando-nulls-first-e-nulls-last

Clique aqui e veja todas as matérias sobre PostgreSQL

Nenhum comentário:

Postar um comentário