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