
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′.
NOME | DATA_ADMISSAO | DATA_ADMISSAO_COM_NVL |
---|---|---|
Carlos Silva | 01/01/2000 | |
Ana Souza | 01/01/2000 | |
Mariana Costa | 01/01/2000 | |
Roberto Alves | 01/01/2000 | |
Fernanda Santos | 01/01/2000 | |
Lucas Oliveira | 01/01/2000 | |
Camila Pereira | 01/01/2000 | |
Ramon Vieira | 25/07/2024 23:25:09 | 25/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’.
NOME | DATA_ADMISSAO | DATA_ADMISSAO_COM_NLV2 |
---|---|---|
Carlos Silva | Sem data admissão | |
Ana Souza | Sem data admissão | |
Mariana Costa | Sem data admissão | |
Roberto Alves | Sem data admissão | |
Fernanda Santos | Sem data admissão | |
Lucas Oliveira | Sem data admissão | |
Camila Pereira | Sem data admissão | |
Ramon Vieira | 25/07/2024 23:25:09 | Com 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.
NOME | SALARIO | BONUS | COMPENSACAO |
---|---|---|---|
Carlos Silva | 7800,000 | 7800 | |
Ana Souza | 2500,000 | 5000,00 | 5000 |
Mariana Costa | 0 | ||
Roberto Alves | 3000,000 | 3000 | |
Fernanda Santos | 3000,000 | 3000 | |
Lucas Oliveira | 4500,000 | 4500 | |
Camila Pereira | 1950,000 | 1950 | |
Ramon Vieira | 4500,000 | 5000,00 | 5000 |
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.
NOME | STATUS | SITUACAO |
---|---|---|
Carlos Silva | Ativo | A |
Ana Souza | Ativo | A |
Mariana Costa | Desligado | D |
Roberto Alves | Ativo | A |
Fernanda Santos | Ativo | A |
Lucas Oliveira | Ativo | A |
Camila Pereira | Desligado | D |
Ramon Vieira | Ativo | A |
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
.
NOME | SALARIO | FAIXA_SALARIAL |
---|---|---|
Carlos Silva | 7800,000 | Alto |
Ana Souza | 2500,000 | Baixo |
Mariana Costa | 7000,000 | Alto |
Roberto Alves | 3000,000 | Médio |
Fernanda Santos | 3000,000 | Médio |
Lucas Oliveira | 4500,000 | Médio |
Camila Pereira | 1950,000 | Baixo |
Ramon Vieira | 4500,000 | Médio |
Observação:
- A cláusula
BETWEEN
é inclusiva, ou seja, o valor desalario
deve estar dentro do intervalo especificado, incluindo os limites. - Se o valor de
salario
se encaixar em mais de uma condição, oCASE
retornará o resultado da primeira condição que for verdadeira. No exemplo acima, se osalario
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
.
NOME | SALARIO | SALARIO_NULL |
---|---|---|
Carlos Silva | 7800,000 | 7800 |
Ana Souza | 2500,000 | 2500 |
Mariana Costa | 7000,000 | 7000 |
Roberto Alves | 3000,000 | 3000 |
Fernanda Santos | 3000,000 | 3000 |
Lucas Oliveira | 4500,000 | 4500 |
Camila Pereira | 1950,000 | |
Ramon Vieira | 4500,000 | 4500 |
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!