Voltar para a lista de artigos Artigos
5 minutos de leitura

Usando CASE com declarações de modificação de dados

O que acontece quando você combina o CASE com as instruções de modificação de dados do SQL? Descubra neste artigo.

A expressão CASE é uma parte muito útil da SQL e que você empregará com freqüência. Já abordamos o que a expressão CASE faz, como formatá-la e como utilizá-la em uma declaração SELECT em"Using CASE to Add Logic to a SELECT". Outro artigo,"Como Ordenar Registros com a Cláusula ORDER BY" demonstrou como usar CASE em uma cláusula ORDER BY.

Mas não esgotamos todas as possibilidades da expressão CASE. Neste post, discutiremos o uso do CASE com as instruções de modificação de dados do SQL.

O que são as instruções de modificação de dados da SQL?

Existem três instruções de modificação de dados em SQL. Elas são chamadas de modificação de dados porque fazem alterações nos dados que são armazenados dentro de uma tabela de banco de dados. Estas instruções são bastante familiares, mesmo para usuários SQL novatos. Elas são:

  • INSERT - Adiciona registros a uma tabela
  • UPDATE - Altera valores nas colunas da tabela
  • DELETE - Remove registros da tabela

Veremos como cada uma destas afirmações funciona com uma expressão CASE. Entretanto, antes de começarmos a escrever perguntas, vejamos o car tabela, mostrada abaixo. Vamos utilizá-la em todos os nossos exemplos:

id brand model info
1 Ford Fiesta NULL
2 Ford Mondeo NULL
3 Opel Astra NULL
4 Ford Galaxy NULL
5 Toyota Corolla NULL
6 Toyota RAV4 NULL

Como você pode ver, esta tabela armazena detalhes sobre os carros: seu número de identificação interno, a marca do carro, o nome do modelo, e um campo opcional para informações adicionais.

Iniciaremos nossa investigação sobre o uso de declarações modificadoras de dados com a expressão CASE com a declaração INSERT.

Inserção de registros usando CASE

Você pode usar uma declaração INSERT para inserir novos registros em uma tabela. Se você quiser mover registros de uma tabela e para outra, use a declaração SELECT INTO.

Nosso primeiro exemplo demonstrará a adição de informações em uma nova tabela, tab. Esta nova tabela será criada com a consulta. Note que estamos realmente utilizando uma declaração SELECT INTO para fazer isto. Aqui está como funciona:

SELECT brand, model,
          CASE brand
               WHEN 'Ford' THEN 'Founder was Henry Ford'
               WHEN 'Opel' THEN 'Founder was Adam Opel'
               WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
                ELSE '-'
		END AS info
INTO tab
FROM car;

Esta declaração SELECT INTO começa tirando dados das colunas brand e model no car mesa e movendo-a para a recém-criada tab mesa. A terceira coluna em tab é a coluna info. O valor na coluna info depende do valor na coluna car.brand. Se o valor na coluna car.brand for "Ford", a string "Founder was Henry Ford" será exibida na coluna tab.info. Se a marca for "Opel", então a string "Founder was Adam Opel" será exibida; para "Toyota", a string "Founder was Kiichiro Toyoda" será exibida. Em qualquer outro caso, o valor retornado será "- ".

Aqui está o resultado tab tabela e seu conteúdo:

brand model info
Ford Fiesta Founder was Henry Ford
Ford Mondeo Founder was Henry Ford
Opel Astra Founder was Adam Opel
Ford Galaxy Founder was Henry Ford
Toyota Corolla Founder was Kiichiro Toyoda
Toyota RAV4 Founder was Kiichiro Toyoda

Usando CASO com ATUALIZAÇÃO

A expressão CASE também pode ser usada em uma declaração em UPDATE. Você está familiarizado com a declaração UPDATE; ela altera ou atualiza os valores das colunas existentes. Se você quiser atualizar os registros com base nos valores das colunas, você pode fazê-lo com a expressão CASE. Veja o exemplo a seguir:

UPDATE car SET info =
CASE brand
          WHEN 'Ford' THEN 'Founder was Henry Ford'
          WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
          ELSE '-'
          END
;

Vemos que as informações na coluna info foram atualizadas. Normalmente, colocaríamos o novo valor na cláusula SET. Ao invés disso, este valor pré-determinado foi substituído pela expressão CASE. O CASE testa o valor na coluna brand e o utiliza para determinar o que deve ser inserido na coluna info. Se algo diferente de "Ford" ou "Toyota" for armazenado na coluna brand, uma string "-" será exibida na coluna info para esse registro.

Aqui está a tabela car tabela após a atualização:

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
3 Opel Astra
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Observe que o registro para o Opel Astra não tem nada na coluna info. Isto porque "Opel" não foi especificado como uma marca no WHEN da expressão CASE. O valor definido em ELSE foi devolvido.

Eliminação de dados usando a expressão CASE

Agora vamos discutir a última das declarações de modificação de dados: DELETE. Ele é usado para remover registros de uma tabela. Mais uma vez, você pode usar a expressão CASE na cláusula WHERE para controlar seus resultados. Vejam este exemplo:

DELETE FROM car 
WHERE FALSE = CASE 
    WHEN info IS NOT NULL THEN TRUE
      ELSE FALSE
END
;

Este CASE testa se o valor na coluna info é NULL. Se não for NULL, então o valor VERDADEIRO é retornado. Se o valor for NULO, o valor FALSO de ELSE é retornado. Se a expressão CASE retorna um valor FALSO, esse registro é apagado.

Abaixo vemos a car tabela após as linhas com valores NULL na coluna info terem sido excluídas:

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Saiba mais sobre a Expressão SQL CASE

Se você estiver interessado em saber mais sobre a expressão CASE, confira o curso LearnSQL's Funções Comuns em SQL. Você aprenderá mais sobre esta expressão e outras. Além disso, você pode praticar suas novas habilidades com exercícios interativos. Experimente hoje mesmo!