O que são Funções de Comparação?

 

No Oracle, funções de comparação são usadas para avaliar condições e comparar valores em consultas SQL. Elas são essenciais para a filtragem e manipulação de dados, permitindo a criação de expressões complexas e decisões baseadas em múltiplas condições.

Vantagens de Usar Funções de Comparação

  • Flexibilidade na Comparação: Permitem a comparação de valores de diferentes formas, adaptando-se a várias necessidades de filtragem.
  • Tratamento de Valores Nulos: Algumas funções tratam valores nulos de maneira especial, evitando erros e garantindo a integridade dos resultados.
  • Simplificação de Consultas: Facilitam a construção de consultas complexas, tornando o código mais legível e eficiente.
  • Manipulação de Dados: Auxiliam na transformação e análise de dados dentro das consultas.

Tipos de Funções de Comparação

NVL

A função NVL substitui valores nulos por um valor especificado. Veja um exemplo:

 

SELECT nome,
       data_admissao,
       NVL(data_admissao, '01/01/2000') AS data_admissao_com_nvl
  FROM funcionarios;

Neste exemplo, se data_admissao for nulo, será substituído por ’01/01/2000′.

 

NOMEDATA_ADMISSAODATA_ADMISSAO_COM_NVL
Carlos Silva01/01/2000
Ana Souza01/01/2000
Mariana Costa01/01/2000
Roberto Alves01/01/2000
Fernanda Santos01/01/2000
Lucas Oliveira01/01/2000
Camila Pereira01/01/2000
Ramon Vieira25/07/2024 23:25:0925/07/2024 23:25:09

NVL2

A função NVL2 retorna um valor se a expressão não for nula e outro valor se a expressão for nula. Veja um exemplo:

 

SELECT nome,
       data_admissao,
       NVL2(data_admissao, 'Com data admissão', 'Sem data admissão') AS data_admissao_com_nlv2
  FROM funcionarios;

Aqui, se data_admissao não for nulo, retornará o valor de ‘Com data admissão’. Caso contrário, retornará ‘Sem data admissão’.

 

NOMEDATA_ADMISSAODATA_ADMISSAO_COM_NLV2
Carlos SilvaSem data admissão
Ana SouzaSem data admissão
Mariana CostaSem data admissão
Roberto AlvesSem data admissão
Fernanda SantosSem data admissão
Lucas OliveiraSem data admissão
Camila PereiraSem data admissão
Ramon Vieira25/07/2024 23:25:09Com data admissão

COALESCE

A função COALESCE retorna o primeiro valor não nulo de uma lista de expressões.

 

Para ilustrar o uso da função COALESCE, vamos primeiro adicionar uma coluna bonus à tabela funcionarios e preencher alguns valores de exemplo:

 

ALTER TABLE funcionarios
ADD bonus NUMBER(10, 2);

-- Atualizando alguns valores de bônus para o exemplo
UPDATE funcionarios
   SET bonus = 5000
 WHERE ID IN (2, 9);

UPDATE funcionarios
   SET salario = NULL
 WHERE id = 4;

Aqui, adicionamos a coluna bonus e definimos valores para alguns id. Para o id 4, o salário foi definido como NULL. Veja um exemplo:

 

SELECT nome, salario, bonus, COALESCE(bonus, salario, 0) AS compensacao
  FROM funcionarios;

Neste exemplo, COALESCE retornará bonus se não for nulo. Caso contrário, retornará salario. Se ambos forem nulos, retornará 0.

 

NOMESALARIOBONUSCOMPENSACAO
Carlos Silva7800,0007800
Ana Souza2500,0005000,005000
Mariana Costa0
Roberto Alves3000,0003000
Fernanda Santos3000,0003000
Lucas Oliveira4500,0004500
Camila Pereira1950,0001950
Ramon Vieira4500,0005000,005000

DECODE

A função DECODE compara uma expressão com um conjunto de valores e retorna um valor correspondente. É semelhante a uma estrutura CASE.

 

Antes de mostrar um exemplo prático, observe que vamos realizar um UPDATE em duas matrículas para definir o status como ‘Desligado’. Isso foi feito para que o exemplo seja mais ilustrativo, pois, atualmente, todos os funcionários estão ativos.

 

UPDATE funcionarios SET status = 'Desligado' WHERE id IN (4, 8);

Aqui, definimos o status como ‘Desligado’ para os id 4 e 8. Veja um exemplo:

 

SELECT nome,
       status,
       DECODE(status, 'Ativo', 'A', 'Desligado', 'D', 'Desconhecido') AS situacao
  FROM funcionarios;

Aqui, DECODE retornará ‘A’ se status for ‘Ativo’, ‘D’ se for ‘Desligado’, e ‘Desconhecido’ para outros valores.

 

NOMESTATUSSITUACAO
Carlos SilvaAtivoA
Ana SouzaAtivoA
Mariana CostaDesligadoD
Roberto AlvesAtivoA
Fernanda SantosAtivoA
Lucas OliveiraAtivoA
Camila PereiraDesligadoD
Ramon VieiraAtivoA

CASE

A expressão CASE permite criar condições complexas dentro das consultas. Veja um exemplo:

 

SELECT nome,
       salario,
       CASE
         WHEN salario > 5000 THEN 'Alto'
         WHEN salario BETWEEN 3000 AND 5000 THEN 'Médio'
         ELSE 'Baixo'
       END AS faixa_salarial
  FROM funcionarios;

Aqui, CASE avalia o salario e retorna ‘Alto’, ‘Médio’ ou ‘Baixo’ com base no valor de salario.

 

NOMESALARIOFAIXA_SALARIAL
Carlos Silva7800,000Alto
Ana Souza2500,000Baixo
Mariana Costa7000,000Alto
Roberto Alves3000,000Médio
Fernanda Santos3000,000Médio
Lucas Oliveira4500,000Médio
Camila Pereira1950,000Baixo
Ramon Vieira4500,000Médio

Observação:

  • A cláusula BETWEEN é inclusiva, ou seja, o valor de salario deve estar dentro do intervalo especificado, incluindo os limites.
  • Se o valor de salario se encaixar em mais de uma condição, o CASE retornará o resultado da primeira condição que for verdadeira. No exemplo acima, se o salario for maior que 5000, o valor será categorizado como ‘Alto’, independentemente de também estar entre 3000 e 5000.

NULLIF

A função NULLIF compara dois valores e retorna NULL se eles forem iguais. Caso contrário, retorna o primeiro valor. Veja um exemplo:

 

SELECT nome, salario, NULLIF(salario, 1950) AS salario_null
  FROM funcionarios;

Neste exemplo, se salario for 1950, NULLIF retornará NULL. Caso contrário, retornará o valor de salario.

 

NOMESALARIOSALARIO_NULL
Carlos Silva7800,0007800
Ana Souza2500,0002500
Mariana Costa7000,0007000
Roberto Alves3000,0003000
Fernanda Santos3000,0003000
Lucas Oliveira4500,0004500
Camila Pereira1950,000
Ramon Vieira4500,0004500

Considerações Finais

 

As funções de comparação são ferramentas poderosas para manipulação e filtragem de dados no Oracle. Utilizando-as corretamente, você pode criar consultas mais flexíveis e eficientes, garantindo a precisão dos resultados e facilitando a análise de dados.

 

Se você tiver alguma dúvida ou sugestão, deixe um comentário abaixo!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima