標準 SQL の条件式

条件式は、入力の評価順序に制約を課します。基本的に、これらは左辺から右辺にかけて短絡評価され、選択された出力値のみを評価します。対照的に、正規関数のすべての入力は、関数を呼び出す前に評価されます。条件式での短絡は、エラー処理やパフォーマンス チューニングに利用できます。

CASE expr

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

説明

expr と、次に続く各 WHEN 句の expr_to_match を比較し、この比較で true が返される最初の結果を返します。残りの WHEN 句と else_result は評価されません。expr = expr_to_match 比較ですべての WHEN 句に関して FALSE または NULL が返される場合、else_result が存在する場合はそれを返し、存在しない場合は NULL を返します。

exprexpr_to_match は任意の型です。これらは、共通するスーパータイプに暗黙的に強制型変換できる必要があります。等価比較は強制変換された値に対して行われます。result 型は複数ある場合があります。result および else_result 式を共通のスーパータイプに強制的に型変換できる必要があります。

戻りデータの型

result[, ...] と else_result のスーパータイプ。

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
  WHEN condition THEN result
  [ ... ]
  [ ELSE else_result ]
  END

説明

後に続く各 WHEN 句の条件を評価し、条件が true である最初の結果を返します。残りの WHEN 句と else_result は評価されません。すべての条件が false または NULL の場合、else_result が存在すればそれが返されます。存在しない場合は NULL が返されます。

condition はブール式でなければなりません。result 型は複数ある場合があります。result および else_result 式は共通のスーパータイプに暗黙的に強制型変換できる必要があります。

戻りデータの型

result[, ...] と else_result のスーパータイプ。

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

説明

最初の非 NULL 式の値を返します。残りの式は評価されません。入力式には任意の型を指定できます。複数の入力式の型がある場合があります。すべての入力式は共通のスーパータイプに暗黙的に強制型変換できる必要があります。

戻りデータの型

expr [, ...] のスーパータイプ。

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)

説明

expr が true の場合は true_result を返し、それ以外の場合は else_result を返します。expr が true の場合、else_result は評価されません。expr が false または NULL の場合、true_result は評価されません。

expr はブール式でなければなりません。true_resultelse_result は、共通のスーパータイプへの強制型変換が可能でなければなりません。

戻りデータの型

true_resultelse_result のスーパータイプ。

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)

説明

expr が NULL の場合、null_result を返します。それ以外の場合は、expr を返します。 expr が NULL でない場合、null_result は評価されません。

exprnull_result には任意の型を指定でき、共通のスーパータイプに暗黙的に強制型変換する必要があります。COALESCE(expr, null_result) と同義です。

戻りデータの型

expr または null_result のスーパータイプ。

SELECT IFNULL(NULL, 0) as result

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

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

NULLIF

NULLIF(expr, expr_to_match)

説明

expr = expr_to_match が true の場合は NULL を返し、それ以外の場合は expr を返します。

exprexpr_to_match は、共通のスーパータイプに暗黙的に強制型変換できる必要があります。また、比較可能型にする必要があります。

戻りデータの型

exprexpr_to_match のスーパータイプ。

SELECT NULLIF(0, 0) as result

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

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