Expressões condicionais no SQL padrão

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     |
+--------+