?>
1-mysql Básico
Exercícios
?>

Capítulo 3

4-Estruturas Avançadas, Parte 2

Veremos duas estruturas específicas:

  • 4.1 - Função if

  • 4.2 - Predicado Case


Função if()

A função MySQL IF é uma das funções de fluxo de controle do MySQL que retorna um valor com base em uma condição. A função IF às vezes é chamada de função IF ELSE ou IF THEN ELSE. A sintaxe da função MySQL IF é a seguinte:


IF(expr,if_true_expr,if_false_expr)


Podemos usar o if() em um query simples ou junto com consultas a tabelas. Veja os exemplos a seguir.

Exemplo 1: exemplos com Função if()

                            

mysql> select if (3 > 2,'3 é maior que 2','') as 'testa if()';
+------------------+
| testa if()       |
+------------------+
| 3 é maior que 2  |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT IF(500 < 1000, 'verdadeiro', 'falso') as 'if 500 < 100';
+--------------+
| if 500 < 100 |
+--------------+
| verdadeiro   |
+--------------+
1 row in set (0.00 sec)


 

Podemos usar if em consultas de tabelas, como mostram os exemplos de consultas no banco livraria dados abaixo:

Exemplo 2: exemplos com Função if()

                            

mysql> select titulo,if(assunto = 'B','Banco de Dados','--') assunto
    -> from livro;
+-----------------------------------+----------------+
| titulo                            | assunto        |
+-----------------------------------+----------------+
| Banco de Dados para Web           | Banco de Dados |
| Programando em Linguagem C        | --             |
| Programando em Linguagem C++      | --             |
| Banco de Dados na Bioinformática  | Banco de Dados |
| Redes de Computadores             | --             |
| teste                             | --             |
+-----------------------------------+----------------+
6 rows in set (0.00 sec)



mysql> select if(titulo like 'Prog%',titulo,'')  as 'Livros de Programação' from livro;
+------------------------------+
| Livros de Programação        |
+------------------------------+
|                              |
| Programando em Linguagem C   |
| Programando em Linguagem C++ |
|                              |
|                              |
|                              |
+------------------------------+
6 rows in set (0.00 sec)



mysql> select
    -> count(if(assunto = 'B',1,NULL)) 'Banco de Dados',
    -> count(if(assunto = 'P',1,NULL)) 'Programação',
    -> count(if(assunto = 'R',1,NULL)) 'Redes'
    -> from livro;
+----------------+---------------+-------+
| Banco de Dados | Programação   | Redes |
+----------------+---------------+-------+
|              2 |             3 |     1 |
+----------------+---------------+-------+
1 row in set (0.03 sec)


mysql> select sum(if(assunto = 'B',1,NULL)) 'Banco de Dados', sum(if(assunto = 'P',1,NULL)) 'Programação', sum(if(assunto = 'R',1,NULL)) 'Redes' from livro;
+----------------+---------------+-------+
| Banco de Dados | Programação   | Redes |
+----------------+---------------+-------+
|              2 |             3 |     1 |
+----------------+---------------+-------+
1 row in set (0.00 sec)


                            
                        

O Predicado CASE

A expressão CASE do MySQL é uma estrutura de fluxo de controle que permite adicionar lógica if-else com diferentes opções a uma consulta. Podemos usar a expressão CASE em qualquer lugar que permita uma expressão válida, por exemplo, cláusulas SELECT, WHERE e ORDER BY.

A expressão CASE tem dois formatos:

  1. A expressão CASE simples (simple case ou case-value) compara um valor ou uma expressão a um conjunto de expressões simples para determinar o resultado.

  2. A expressão CASE pesquisada (searched CASE ou when-value) avalia um conjunto de expressões booleanas para determinar o resultado.

Ambos os formatos suportam um argumento ELSE opcional.

Case na Forma Simples

Sintaxe do Case na Forma Simples

                            

CASE value
   WHEN value1 THEN result1
   WHEN value2 THEN result2
   …
   [ELSE else_result]
END

                            
                        

O exemplo a seguir usa o banco de livraria e faz consulta com a estrutura CASE.

Exemplo 3: usando case no banco livraria

                            


mysql> select case assunto
    -> when 'B' then 'Relevante'
    -> when 'P' then 'Irrelavante'
    -> end as Relevancia
    -> from livro;
+-------------+
| Relevancia  |
+-------------+
| Relevante   |
| Irrelavante |
| Irrelavante |
| Relevante   |
| NULL        |
| Irrelavante |
+-------------+
6 rows in set (0.00 sec)

                            
                        

Podemos melhorar o resultado, mostrando o assunto e sua relevância para o estudo de banco de dados.

Exemplo 4: usando case no banco livraria

                            

mysql> select assunto, case assunto when 'B' then 'Muito' when 'P' then 'Médio'
when 'R' then 'Pouco' end as Relevancia from livro;
+---------+------------+
| assunto | Relevancia |
+---------+------------+
| B       | Muito      |
| P       | Médio      |
| P       | Médio      |
| B       | Muito      |
| R       | Pouco      |
| P       | Médio      |
+---------+------------+
6 rows in set (0.00 sec)


                        

No próximo exemplo, melhoramos ainda mais a consulta, agora mostrando o assunto ao invés de seu código.

Exemplo 5: usando case no banco livraria

                            
mysql> select descricao, case assunto when 'B' then 'Muito' when 'P' then 'Médio' when 'R' then 'Pouco' end as Relevancia from livro
    -> inner join assunto on assunto = sigla;
+----------------+------------+
| descricao      | Relevancia |
+----------------+------------+
| Banco de Dados | Muito      |
| Programação    | Médio      |
| Programação    | Médio      |
| Banco de Dados | Muito      |
| Redes          | Pouco      |
| Programação    | Médio      |
+----------------+------------+
6 rows in set (0.01 sec)


                        

Expressão CASE "pesquisada (searched CASE)

Expressão CASE pesquisada permite que façamos testes usando diferentes colunas, variáveis e expressões. O seguinte mostra a sintaxe de uma expressão CASE pesquisada:

Sintaxe do Case na Forma "pesquisada"

                            
CASE
   WHEN expression1 THEN result1
   WHEN expression2 THEN result2
   …
   [ELSE else_result]
END



                        

O seguinte exemplo usa o banco de dados livraria para fazer um consulta que usa CASE.

Exemplo

Para livros que possuem data de lançamento e o preço superior a R$45,00 retornar o título concatenado com a expressão - "livro caro". Para livros que não possuem data de lançamento, retornar o título concatenado com a expressão "lançamento em breve". E para livros com preço abaixo de 45 reais apresentar a saída com o título concatenado com "livro barato".

Exemplo 6: usando case no banco livraria

                            

mysql> select case
    -> when lancamento is not null and preco > 40 
    ->         then concat(titulo,' - livro caro')
    ->      when lancamento is null and editora is not null 
    ->      then concat(titulo,' - lancamento em breve') 
    -> when editora is null
    -> then concat(titulo,' - em preparação')
    -> else concat(titulo,' - livro barato') 
    ->     end as 'Característica' 
    -> from livro;
+---------------------------------------------------------+
| Característica                                          |
+---------------------------------------------------------+
| Banco de Dados para Web - livro barato                  |
| Programando em Linguagem C - livro barato               |
| Programando em Linguagem C++ - livro caro               |
| Banco de Dados na Bioinformática - lancamento em breve  |
| Redes de Computadores - livro caro                      |
+---------------------------------------------------------+
6 rows in set (0.01 sec)

                            
                        

Exercício

Execute os exemplos apresentados nessa seção.

voltar ao início da página