SQL CASE pos­si­bi­lita a ma­ni­pu­la­ção de bancos de dados por realizar consultas baseadas em condições, exibindo os res­pec­ti­vos re­sul­ta­dos. O conceito da condição CASE é se­me­lhante ao da instrução If-then-else.

O que é SQL CASE?

Em muitas lin­gua­gens de banco de dados e lin­gua­gens de pro­gra­ma­ção, a instrução If-then-else é comum. Ela executa uma ação enquanto uma de­ter­mi­nada condição for ver­da­deira. Quando isso deixa de ser ver­da­deiro, o programa sai do loop ou executa uma ação al­ter­na­tiva. A SQL (Struc­tu­red Query Language) adota um princípio se­me­lhante e fornece a instrução SQL CASE. Esta percorre uma lista de condições e retorna um valor es­pe­cí­fico quando uma condição é atendida. Se nenhuma condição for atendida e não houver uma cláusula ELSE definida, o resultado será NULL.

VPS Hosting (Virtual Private Servers)
World-class VPS at America’s lowest price

Hos­pe­da­gem VPS poderosa e de baixo custo para rodar suas apli­ca­ções sob medida, com as­sis­tente pessoal e suporte 24 horas.

  • Save 50% or more vs leading hosts
  • Unlimited traffic & no setup fees 
  • 99.99% uptime gua­ran­teed
  • Free 24/7 premium support 

Sintaxe de SQL CASE

A sintaxe básica do SQL CASE é a seguinte:

SELECT coluna1, coluna2, …,
CASE
	WHEN condição1 THEN resultado1
END AS nome
FROM nome_da_tabela;
sql

Você es­pe­ci­fica quais colunas devem ser con­si­de­ra­das com o comando SQL SELECT. Com CASE, você verifica a condição. Se a condição for atendida (ou seja, for ver­da­deira), o valor do resultado associado será exibido. END AS encerra a estrutura. FROM indica em qual tabela a estrutura deve ser aplicada.

Com a restrição opcional ELSE, a sintaxe fica assim:

SELECT coluna1, coluna2, …,
CASE
	WHEN condição1 THEN resultado1
	ELSE resultado_diferente
END AS nome
FROM nome_da_tabela;
sql

Exemplo de SQL CASE

Para ilustrar o fun­ci­o­na­mento do SQL CASE, criamos uma tabela simples chamada “Lista de clientes”. Nela, re­gis­tra­mos um número de cliente, o nome do cliente, sua lo­ca­li­za­ção, a data do pedido, a quan­ti­dade de itens pedidos e o valor total pago em reais.

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o Data Itens Valor Total
1427 Santos Salvador 13/01/2024 14 634
1377 Moreira Aparecida do Norte 19/01/2024 9 220
1212 Garcia Aparecida do Norte 03/01/2024 15 400
1431 Vieira Recife 19/01/2024 22 912
1118 Becker Poços de Caldas 01/02/2024 10 312

Agora uti­li­za­mos a condição para processar a lista. Para valores totais acima de 400 reais, deve ser exibido um texto es­pe­cí­fico. O mesmo vale para valores abaixo de 400 reais. A restrição ELSE é usada para pedidos que totalizam exa­ta­mente 400 reais. Você já pode ver que várias condições podem ser ve­ri­fi­ca­das em sequência. A sintaxe adequada para nosso exemplo é a seguinte:

SELECT Número do Cliente, Nome, Localização, Data, Itens, Valor Total
CASE
	WHEN Valor Total > 400 THEN 'O valor da compra é superior a 400 reais'
   	WHEN Valor Total < 400 THEN 'O valor da compra é inferior a 400 reais'
   	ELSE 'O valor da compra é igual a 400 reais'
END AS Detalhes do pedido
FROM Lista de clientes;
sql

A saída cor­res­pon­dente é se­me­lhante a esta:

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o Data Itens Valor Total Detalhes da Compra
1427 Santos Salvador 13/01/2024 14 634 O valor da compra é superior a 400 reais
1377 Moreira Aparecida do Norte 19/01/2024 9 220 O valor da compra é inferior a 400 reais
1212 Garcia Aparecida do Norte 03/01/2024 15 400 O valor da compra é exa­ta­mente 400 reais
1431 Vieira Recife 19/01/2024 22 912 O valor da compra é superior a 400 reais
1118 Becker Poços de Caldas 01/02/2024 10 312 O valor da compra é inferior a 400 reais

Combinar SQL CASE com outras ins­tru­ções

Você também pode consultar as condições dentro de outras ins­tru­ções. Abaixo, or­ga­ni­za­mos as entradas por número do cliente. Se este não estiver dis­po­ní­vel (ou seja, for NULL), o nome do cliente deve ser con­si­de­rado. Este é o código cor­res­pon­dente:

SELECT Número do Cliente, Nome, Localização, Data, Itens, Valor Total
FROM Lista de clientes
ORDER BY
(CASE
		WHEN Número do Cliente IS NULL THEN Nome
		ELSE Número do Cliente
END);
sql

A saída é a seguinte:

Número do Cliente Nome Lo­ca­li­za­Ã§Ã£o Data Itens Valor Total
1118 Becker Poços de Caldas 2/1/2024 10 312
1212 Garcia Aparecida do Norte 1/3/2024 15 400
1377 Moreira Aparecida do Norte 1/19/2024 9 220
1427 Santos Salvador 1/13/2024 14 634
1431 Vieira Recife 1/19/2024 22 912
Dica

Com o SQL Server Hosting da IONOS, você pode escolher entre MSSQL, MySQL ou MariaDB. Beneficie-se de uma per­for­mance ex­cep­ci­o­nal, de uma forte ar­qui­te­tura de segurança e de con­sul­to­rias per­so­na­li­za­das!

Ir para o menu principal