Expresiones condicionales en SQL estándar

Las expresiones condicionales imponen restricciones en el orden de evaluación de sus entradas. En síntesis, se evalúan de izquierda a derecha, con cortocircuito, y solo evalúan el valor de resultado elegido. Por el contrario, todas las entradas a las funciones normales se evalúan antes de llamar a la función. El cortocircuito en expresiones condicionales puede explotarse para el manejo de errores o el ajuste del rendimiento.

CASE expr

CASE expr
  WHEN expr_to_match THEN result
  [ ... ]
  [ ELSE else_result ]
END

Descripción

Compara expr con el valor expr_to_match de cada cláusula WHEN sucesiva y muestra el primer resultado en el que esta comparación sea verdadera. Las cláusulas WHEN restantes y else_result no se evalúan. Si la comparación expr = expr_to_match da como resultado “falso” o NULL en todas las cláusulas WHEN, se muestra else_result si está presente; si no lo está, se muestra NULL.

expr y expr_to_match pueden ser de cualquier tipo. Deben ser coercibles de forma implícita a un supertipo común; las comparaciones de igualdad se realizan en valores coercionados. Puede haber varios tipos de result. Las expresiones result y else_result deben ser coercibles a un supertipo común.

Tipo de datos mostrados

Supertipo de result[, …] y else_result.

Ejemplo

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

Descripción

Evalúa la condición de cada cláusula WHEN sucesiva y muestra el primer resultado en el que la condición sea verdadera; las cláusulas WHEN restantes y else_result no se evalúan. Si todas las condiciones son falsas o NULL, se muestra else_result si está presente; si no lo está, se muestra NULL.

condition debe ser una expresión booleana. Puede haber varios tipos de result. Las expresiones result y else_result deben ser coercibles de manera implícita a un supertipo común.

Tipo de datos mostrados

Supertipo de result[, …] y else_result.

Ejemplo

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[, ...])

Descripción

Muestra el valor de la primera expresión no nula. Las expresiones restantes no se evalúan. Una expresión de entrada puede ser de cualquier tipo. Puede haber varios tipos de expresión de entrada. Todas las expresiones de entrada deben ser coercibles de forma implícita a un supertipo común.

Tipo de datos mostrados

Supertipo de expr[, …].

Ejemplos

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)

Descripción

Si expr es verdadero, se muestra true_result; de lo contrario, se muestra else_result. else_result no se evalúa si expr es verdadero. true_result no se evalúa si expr es falso o NULL.

expr debe ser una expresión booleana. true_result y else_result deben ser coercibles a un supertipo común.

Tipo de datos mostrados

Supertipo de true_result y else_result.

Ejemplo

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)

Descripción

Si expr es NULL, se muestra null_result. De lo contrario, se muestra expr. Si expr no es NULL, null_result no se evalúa.

expr y null_result pueden ser de cualquier tipo y deben ser coercibles de forma implícita a un supertipo común. Sinónimo de COALESCE(expr, null_result).

Tipo de datos mostrados

Supertipo de expr o null_result.

Ejemplos

SELECT IFNULL(NULL, 0) as result

+--------+
| result |
+--------+
| 0      |
+--------+
SELECT IFNULL(10, 0) as result

+--------+
| result |
+--------+
| 10     |
+--------+

NULLIF

NULLIF(expr, expr_to_match)

Descripción

Se muestra NULL si expr = expr_to_match es verdadero; de lo contrario, se muestra expr.

expr y expr_to_match deben ser coercibles de manera implícita a un supertipo común y deben ser comparables.

Tipo de datos mostrados

Supertipo de expr y expr_to_match.

Ejemplo

SELECT NULLIF(0, 0) as result

+--------+
| result |
+--------+
| NULL   |
+--------+
SELECT NULLIF(10, 0) as result

+--------+
| result |
+--------+
| 10     |
+--------+