MySQL - Trabalhando com IFs e CASEs
Não, não é só nas linguagens de programação que temos IF's e CASE's, no SQL também os temos e este artigo é justamente para falarmos um pouco sobre eles e algumas utilizações.
Vamos iniciar exibindo a nossa tabela teste
id nome idade estado
1 Pedro 50 SP
2 Antonio 30 RJ
3 Amélia 20 SP
4 Marta 15 SP
5 Maria 80 SP
6 NULL NULL RJ
Trabalhando com IF
A sintaxe básica é a que segue abaixo
SELECT *,IF(estado = 'SP', 'São Paulo','Rio de Janeiro') AS nome_do_estado FROM teste
id nome idade estado nome_do_estado
1 Pedro 50 SP São Paulo
2 Antonio 30 RJ Rio de Janeiro
3 Amélia 20 SP São Paulo
4 Marta 15 SP São Paulo
5 Maria 80 SP São Paulo
6 NULL NULL RJ Rio de Janeiro
Ou seja, IF(campo = 'valor1', 'resposta 1','resposta 2') onde 'resposta 1' ocorre se o valor de um determinado regisro de "campo" for igual a 'valor1'
Podemos também aninhar IF's e fazer comparações maior e menor que.
SELECT *,IF(idade > 60, 'Idoso',IF(idade < 30, 'Jovem', 'Meia Idade')) AS faixa_etaria FROM teste
id nome idade estado faixa_etaria
1 Pedro 50 SP Meia Idade
2 Antonio 30 RJ Meia Idade
3 Amélia 20 SP Jovem
4 Marta 15 SP Jovem
5 Maria 80 SP Idoso
6 NULL NULL RJ Meia Idade
Podemos também utilizar o IF para 'melhorar' o retorno destes valores NULL.
SELECT id,IF(nome IS NULL, ' - ',nome) AS nome,IF(idade IS NULL, ' - ',idade) AS idade,estado,IF(idade > 60, 'Idoso',IF(idade < 30, 'Jovem', 'Meia Idade')) AS faixa_etaria FROM teste
id nome idade estado faixa_etaria
1 Pedro 50 SP Meia Idade
2 Antonio 30 RJ Meia Idade
3 Amélia 20 SP Jovem
4 Marta 15 SP Jovem
5 Maria 80 SP Idoso
6 - - RJ Meia Idade
A faixa etária também pode ser corrigida utilizando a mesma técnica do IF aninhado. Podemos utilizar também o IFNULL() para fazer a mesma coisa.
SELECT id,IFNULL(nome,' - ') AS nome,IFNULL(idade, ' - ') AS idade,estado,IF(idade > 60, 'Idoso',IF(idade < 30, 'Jovem', 'Meia Idade')) AS faixa_etaria FROM teste
Ou seja:
IF(expr1 IS NOT NULL,expr1,expr2)
e
IFNULL(expr1,expr2)
São equivalentes.
A mesma técnica pode ser utilizadas para melhorar o retorno de casos de divisões por zero.
Vendo pela perspectiva da eficiência, utilizar IFNULL é melhor para o processamento.
Trabalhando com CASE
Alguns dos procedimentos feitos com IF podem ser feitos com CASE também. A diferença é que nos casos em que temos de escrever vários IF's aninhados, o CASE facilita muito o procedimento.
SELECT *,CASE estado WHEN 'SP' THEN 'São Paulo' WHEN 'RJ' THEN 'Rio de Janeiro' END AS nome_do_estado FROM teste
id nome idade estado nome_do_estado
1 Pedro 50 SP São Paulo
2 Antonio 30 RJ Rio de Janeiro
3 Amélia 20 SP São Paulo
4 Marta 15 SP São Paulo
5 Maria 80 SP São Paulo
6 NULL NULL RJ Rio de Janeiro
SELECT *,CASE nome WHEN 'Pedro' THEN 'Masculino' WHEN 'Antonio' THEN 'Masculino' WHEN 'Amelia' THEN 'Feminino' WHEN 'Marta' THEN 'Feminino' WHEN 'Maria' THEN 'Feminino' END AS sexo FROM teste
id nome idade estado sexo
1 Pedro 50 SP Masculino
2 Antonio 30 RJ Masculino
3 Amélia 20 SP Feminino
4 Marta 15 SP Feminino
5 Maria 80 SP Feminino
6 NULL NULL RJ NULL
Valeu pela visita!
Este comentário foi removido pelo autor.
ResponderExcluir