As expressões condicionais impõem restrições na ordem de avaliação das entradas. Em essência, elas são avaliadas da esquerda para a direita, com curto-circuito, e somente avaliam o valor da saída escolhida. Por outro lado, todas as entradas das funções regulares são avaliadas antes de chamar a função. O curto-circuito em expressões condicionais pode ser explorado para o tratamento de erros ou ajuste do desempenho.
expr CASE
CASE expr
WHEN expr_to_match THEN result
[ ... ]
[ ELSE else_result ]
END
Descrição
Compara expr
com expr_to_match
de cada cláusula WHEN
consecutiva e retorna o primeiro resultado em que essa comparação retorna verdadeiro. As cláusulas WHEN
restantes e else_result
não são avaliadas. Se a comparação expr = expr_to_match
retorna falso ou NULL para todas as cláusulas WHEN
, retorna else_result
se estiver presente; se não estiver presente, retorna NULL.
expr
e expr_to_match
podem ser de qualquer tipo. Eles precisam ser implicitamente coercíveis para um supertipo comum. As comparações de igualdade são feitas em valores forçados. Pode haver vários tipos de result
. As expressões result
e else_result
precisam ser coercíveis a um supertipo comum.
Tipo de dados retornados
Supertipo de result
[, ...] e else_result
.
Exemplo
WITH Numbers AS
(SELECT 90 as A, 2 as B UNION ALL
SELECT 50, 8 UNION ALL
SELECT 60, 6 UNION ALL
SELECT 50, 10)
SELECT A, B,
CASE A
WHEN 90 THEN 'red'
WHEN 50 THEN 'blue'
ELSE 'green'
END
AS result
FROM Numbers
+------------------+
| A | B | result |
+------------------+
| 90 | 2 | red |
| 50 | 8 | blue |
| 60 | 6 | green |
| 50 | 10 | blue |
+------------------+
CASE
CASE
WHEN condition THEN result
[ ... ]
[ ELSE else_result ]
END
Descrição
Avalia a condição de cada cláusula WHEN
sucessiva e retorna o primeiro resultado em que a condição é verdadeira. As cláusulas WHEN
e else_result
restantes não são avaliadas. Se todas as condições forem falsas ou NULL, retornará else_result
se presente; se não estiver presente, retornará NULL.
condition
precisa ser uma expressão booleana. Pode haver vários tipos de result
.
As expressões result
e else_result
precisam ser implicitamente coercíveis a um supertipo comum.
Tipo de dados retornados
Supertipo de result
[, ...] e else_result
.
Exemplo
WITH Numbers AS
(SELECT 90 as A, 2 as B UNION ALL
SELECT 50, 6 UNION ALL
SELECT 20, 10)
SELECT A, B,
CASE
WHEN A > 60 THEN 'red'
WHEN A > 30 THEN 'blue'
ELSE 'green'
END
AS result
FROM Numbers
+------------------+
| A | B | result |
+------------------+
| 90 | 2 | red |
| 50 | 6 | blue |
| 20 | 10 | green |
+------------------+
COALESCE
COALESCE(expr[, ...])
Descrição
Retorna o valor da primeira expressão não nula. As expressões restantes não são avaliadas. Uma expressão de entrada pode ser de qualquer tipo. Pode haver vários tipos de expressão de entrada. Todas as expressões de entrada precisam ser implicitamente coercíveis para um supertipo comum.
Tipo de dados retornados
Supertipo de expr
[, ...].
Exemplos
SELECT COALESCE('A', 'B', 'C') as result
+--------+
| result |
+--------+
| A |
+--------+
SELECT COALESCE(NULL, 'B', 'C') as result
+--------+
| result |
+--------+
| B |
+--------+
IF
IF(expr, true_result, else_result)
Descrição
Se expr
for verdadeiro, retornará true_result
, caso contrário, retornará else_result
.
else_result
não será avaliado se expr
for verdadeiro. true_result
não será avaliado se expr
for falso ou NULL.
expr
precisa ser uma expressão booleana. true_result
e else_result
precisam ser coercíveis a um supertipo comum.
Tipo de dados retornados
Supertipo de true_result
e else_result
.
Exemplo
WITH Numbers AS
(SELECT 10 as A, 20 as B UNION ALL
SELECT 50, 30 UNION ALL
SELECT 60, 60)
SELECT
A, B,
IF( A<B, 'true', 'false') as result
FROM Numbers
+------------------+
| A | B | result |
+------------------+
| 10 | 20 | true |
| 50 | 30 | false |
| 60 | 60 | false |
+------------------+
IFNULL
IFNULL(expr, null_result)
Descrição
Se expr
for NULL, retornará null_result
. Caso contrário, retorna expr
. Se expr
não for NULL, null_result
não será avaliado.
expr
e null_result
podem ser de qualquer tipo e precisam ser implicitamente coercíveis para um supertipo comum. Sinônimo de COALESCE(expr, null_result)
.
Tipo de dados retornados
Supertipo de expr
ou null_result
.
Exemplos
SELECT IFNULL(NULL, 0) as result
+--------+
| result |
+--------+
| 0 |
+--------+
SELECT IFNULL(10, 0) as result
+--------+
| result |
+--------+
| 10 |
+--------+
NULLIF
NULLIF(expr, expr_to_match)
Descrição
Retornará NULL se expr = expr_to_match
for verdadeiro. Caso contrário, retornará expr
.
expr
e expr_to_match
precisam ser implicitamente coercíveis para um supertipo comum e precisam ser comparáveis.
Tipo de dados retornados
Supertipo de expr
e expr_to_match
.
Exemplo
SELECT NULLIF(0, 0) as result
+--------+
| result |
+--------+
| NULL |
+--------+
SELECT NULLIF(10, 0) as result
+--------+
| result |
+--------+
| 10 |
+--------+