Introdução ao SQL
Case
Expressões CASE
O padrão SQL prevê a possibilidade de utilizar a expressão CASE, presente em diversas linguagens de programação. Utilizando essa cláusula é possível criar complexas estruturas de controle tanto nas diversas linguagens de programação como nos comandos SQL. Ao ser utilizada a cláusula CASE em comandos SQL é possível economizar diversas linhas de código, pois não é necessário criar blocos de programação para testar condições.
A expressão CASE será testada em tempo de execução do comando SELECT ou UPDATE. Como o CASE faz parte de outro comando, será possível colocá-lo em qualquer situação em que um valor deva ser testado.
Veja que em linguagens de programação usuais a expressão CASE, que é autônoma, não tem a mesma forma de avaliação e executará um bloco de instruções. Dessa forma, um único comando testará diversas linhas retornando, em cada linha, o comando correspondente à linha analisada.
SELECT
É possível utilizar o comando SELECT prevendo diversas condições para extração dos dados. A sintaxe é a seguinte:
SELECT colunas,
CASE
WHEN condição THEN ação
...
[ELSE condição padrão]
END
FROM tabela;
Como exemplo, podemos imaginar uma situação em que desejamos dar um desconto sobre o preço de venda CDs em função do preço. Quanto maior o preço de venda, maior o desconto. Veja:
select nome_cd, preco_venda,
case
when preco_venda < 10 then
preco_venda * 0.9
when preco_venda >=10 and preco_venda < 13 then
preco_venda * .8
else
preco_venda * .7
end venda
from cd
Nome_CD |
Preço_Venda |
Venda |
Mais do Mesmo |
16,00 |
11,20 |
Bate-Boca |
13,00 |
9,10 |
Elis Regina |
20,00 |
14,00 |
Veja que foi acrescentado após o END do comando o nome que queremos para a coluna (VENDA). O banco de dados faz os cálculos com base nas condições descritas em CASE, ou seja, quando o preço de venda for menor que 10, será dado um desconto de 10%; se for maior ou igual a 10 e menor que 13, será dado 20% de desconto e se for maior ou igual a 13, será dado 20% de desconto e se for maior ou igual a 13, será dado um desconto de 30%.
UPDATE
Podemos utilizar a mesma cláusula com o comando UPDATE. Assim, poderemos realizar atualizações com base em condições, simplificando a lógica de atualização dos dados. Veja a seguir um exemplo de como ficaria o banco de dados ao realizarmos a atualização proposta no comando SELECT anterior:
update cd
set preco_venda =
case
when preco_venda < 10 then
preco_venda * 0.9
when preco_venda >=10 and preco_venda < 13 then
preco_venda * .8
else
preco_venda * .7
end;
Vamos verificar como ficou o conteúdo do campo que atualizamos:
Nome_CD |
Preço_Venda |
Mais do Mesmo |
3,47 |
Bate-Boca |
3,18 |
Elis Regina |
3,81 |
CASE compacto
É possível utilizar um teste CASE mais compacto que o demonstrado anteriormente. Para isso, basta colocarmos a coluna que queremos avaliar após a cláusula CASE e testarmos os valores após a cláusula WHEN. Observe que nesse caso é possível testar apenas igualdade, uma vez que nenhum operador poderá ser colocado ao lado do valor avaliado.
O exemplo a seguir é apenas didático, pois o correto seria unir as tabelas CD e GRAVADORA, e mostra o nome do CD e o nome da gravadora.
select nome_cd,
case codigo_gravadora
when 1 then 'EMI'
when 2 then 'BMG'
when 3 then 'Som Livre'
end
from CD;
Conclusão: Podemos trabalhar de várias maneiras com CASE, é muito prático para criarmos triggers entre outras funções, até o próximo artigo.
Autor:Rubens Antunes
Autor do Livro: Delphi Faça Uma Aplicação Comercial