# Como configurar e consultar condições com SQL CASE

SQL CASE possibilita a manipulação de bancos de dados por realizar consultas baseadas em condições, exibindo os respectivos resultados. O conceito da condição CASE é semelhante ao da instrução If-then-else.

## O que é SQL CASE?

Em muitas linguagens de banco de dados e linguagens de programação, a instrução If-then-else é comum. Ela executa uma ação enquanto **uma determinada condição for verdadeira**. Quando isso deixa de ser verdadeiro, o programa sai do loop ou executa uma ação alternativa. A [SQL (*Structured Query Language*)](https://www.ionos.com/pt-br/digitalguide/servidor/conhecimento/o-que-e-sql/) adota um princípio semelhante e fornece a instrução SQL CASE. Esta percorre uma lista de condições e retorna um valor especí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.

## Sintaxe de SQL CASE

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

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

Você especifica quais colunas devem ser consideradas com o comando SQL SELECT. Com CASE, você verifica a condição. Se a condição for atendida (ou seja, for verdadeira), 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:

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

## Exemplo de SQL CASE

Para ilustrar o funcionamento do SQL CASE, criamos uma tabela simples chamada “Lista de clientes”. Nela, registramos um número de cliente, o nome do cliente, sua localização, a data do pedido, a quantidade de itens pedidos e o valor total pago em reais.

<table>
  <thead>
    <tr>
      <th><strong>Número do Cliente</strong></th>
      <th><strong>Nome</strong></th>
      <th><strong>Localização</strong></th>
      <th><strong>Data</strong></th>
      <th><strong>Itens</strong></th>
      <th><strong>Valor Total</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Santos</td>
      <td>Salvador</td>
      <td>13/01/2024</td>
      <td>14</td>
      <td>634</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Moreira</td>
      <td>Aparecida do Norte</td>
      <td>19/01/2024</td>
      <td>9</td>
      <td>220</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Garcia</td>
      <td>Aparecida do Norte</td>
      <td>03/01/2024</td>
      <td>15</td>
      <td>400</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Vieira</td>
      <td>Recife</td>
      <td>19/01/2024</td>
      <td>22</td>
      <td>912</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Poços de Caldas</td>
      <td>01/02/2024</td>
      <td>10</td>
      <td>312</td>
    </tr>
  </tbody>
</table>

Agora utilizamos a condição para processar a lista. Para valores totais acima de 400 reais, deve ser exibido um texto específico. O mesmo vale para valores abaixo de 400 reais. A restrição ELSE é usada para pedidos que totalizam exatamente 400 reais. Você já pode ver que várias condições podem ser verificadas em sequência. A sintaxe adequada para nosso exemplo é a seguinte:

```sql
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;
```

A saída correspondente é semelhante a esta:

<table>
  <thead>
    <tr>
      <th><strong>Número do Cliente</strong></th>
      <th><strong>Nome</strong></th>
      <th><strong>Localização</strong></th>
      <th><strong>Data</strong></th>
      <th><strong>Itens</strong></th>
      <th><strong>Valor Total</strong></th>
      <th><strong>Detalhes da Compra</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Santos</td>
      <td>Salvador</td>
      <td>13/01/2024</td>
      <td>14</td>
      <td>634</td>
      <td>O valor da compra é superior a 400 reais</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Moreira</td>
      <td>Aparecida do Norte</td>
      <td>19/01/2024</td>
      <td>9</td>
      <td>220</td>
      <td>O valor da compra é inferior a 400 reais</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Garcia</td>
      <td>Aparecida do Norte</td>
      <td>03/01/2024</td>
      <td>15</td>
      <td>400</td>
      <td>O valor da compra é exatamente 400 reais</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Vieira</td>
      <td>Recife</td>
      <td>19/01/2024</td>
      <td>22</td>
      <td>912</td>
      <td>O valor da compra é superior a 400 reais</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Poços de Caldas</td>
      <td>01/02/2024</td>
      <td>10</td>
      <td>312</td>
      <td>O valor da compra é inferior a 400 reais</td>
    </tr>
  </tbody>
</table>

## Combinar SQL CASE com outras instruções

Você também pode consultar as condições dentro de outras instruções. Abaixo, organizamos as entradas por número do cliente. Se este não estiver disponível (ou seja, for NULL), o nome do cliente deve ser considerado. Este é o código correspondente:

```sql
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);
```

A saída é a seguinte:

<table>
  <thead>
    <tr>
      <th><strong>Número do Cliente</strong></th>
      <th><strong>Nome</strong></th>
      <th><strong>Localização</strong></th>
      <th><strong>Data</strong></th>
      <th><strong>Itens</strong></th>
      <th><strong>Valor Total</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Poços de Caldas</td>
      <td>2/1/2024</td>
      <td>10</td>
      <td>312</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Garcia</td>
      <td>Aparecida do Norte</td>
      <td>1/3/2024</td>
      <td>15</td>
      <td>400</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Moreira</td>
      <td>Aparecida do Norte</td>
      <td>1/19/2024</td>
      <td>9</td>
      <td>220</td>
    </tr>
    <tr>
      <td>1427</td>
      <td>Santos</td>
      <td>Salvador</td>
      <td>1/13/2024</td>
      <td>14</td>
      <td>634</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Vieira</td>
      <td>Recife</td>
      <td>1/19/2024</td>
      <td>22</td>
      <td>912</td>
    </tr>
  </tbody>
</table>

Dica Com o [SQL Server Hosting](https://www.ionos.com/cloud/sql-server-hosting "SQL Server Hosting — IONOS") da IONOS, você pode escolher entre MSSQL, MySQL ou MariaDB. Beneficie-se de uma performance excepcional, de uma forte arquitetura de segurança e de consultorias personalizadas!


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-case/](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/sql-case/) for AI/LLM consumption.