| --- |
| { |
| "title": "NULL", |
| "language": "ja", |
| "description": "行の列に値がない場合、それはNULLであると言われます。NULLは「NOT NULL」制約によって制限されていない任意の列に現れることができます。" |
| } |
| --- |
| ## NULLの基本的な紹介 |
| |
| 行の列に値がない場合、その列はNULLであると言われます。NULLは"NOT NULL"制約によって制限されていない任意の列に現れることができます。実際の値が不明な場合や値に意味がない場合にNULLを使用してください。 |
| |
| 数値のゼロや空文字列を表すためにNULLを使用しないでください。これらは同等ではありません。 |
| |
| NULLを含む算術式は常にNULLという結果になります。例えば、NULLに10を加算してもNULLという結果になります。実際、NULLがオペランドとして与えられると、すべての演算子はNULLを返します。 |
| |
| ## 関数の引数としてのNULL |
| |
| NULLが引数として提供された場合、ほとんどの集約関数はNULLを返します。NULL値が発生した場合に値を返すためにIFNULL関数を使用できます。例えば、IFNULL(arg, 0)という式は、argがNULLの場合は0を返し、argがNULLでない場合はその値を返します。各関数の具体的な動作については、「Functions」セクションを参照してください。 |
| |
| ## NULLと比較演算子 |
| |
| NULLの結果をテストするには、IS NULLとIS NOT NULLの比較条件のみを使用できます。NULLに依存する条件が使用された場合、結果はUNKNOWNになります。NULLは欠損データを表すため、NULLは任意の値や他のNULLと等しくなったり等しくなかったりすることはできません。 |
| |
| 比較可能なシナリオ(内部の値がNULLであるネストされた型の比較など)では、NULLは常に現在の型で表現できる任意の値より小さいと見なされます。つまり、それ自体を除くすべての値より小さいということです: |
| |
| ```sql |
| select array(null) < array(-1), array(null) > array(-1); |
| +-------------------------+-------------------------+ |
| | array(null) < array(-1) | array(null) > array(-1) | |
| +-------------------------+-------------------------+ |
| | 1 | 0 | |
| +-------------------------+-------------------------+ |
| |
| select array(cast("nan" as double)) > array(null); |
| +--------------------------------------------+ |
| | array(cast("nan" as double)) > array(null) | |
| +--------------------------------------------+ |
| | 1 | |
| +--------------------------------------------+ |
| |
| select array(cast("inf" as double)) > array(null); |
| +--------------------------------------------+ |
| | array(cast("inf" as double)) > array(null) | |
| +--------------------------------------------+ |
| | 1 | |
| +--------------------------------------------+ |
| ``` |
| ## 条件におけるNULL |
| |
| UNKNOWNと評価される条件は、FALSEとほぼ同じように動作します。例えば、WHERE句でUNKNOWNと評価される条件を持つSELECT文は、行を返しません。ただし、UNKNOWNと評価される条件とFALSEとの違いは、UNKNOWN条件の評価結果に対するさらなる操作もUNKNOWNと評価されることです。したがって、NOT FALSEの計算結果はTRUEですが、NOT UNKNOWNの計算結果はUNKNOWNです。 |
| |
| 下の表は、条件におけるNULLを含む様々な評価の例を示しています。UNKNOWNと評価される条件がSELECT文のWHERE句で使用された場合、クエリは行を返しません。 |
| |
| | **条件** | **Aの値** | **評価** | |
| | :-------------- | :------------- | :------------- | |
| | `a IS NULL` | `10` | `FALSE` | |
| | `a IS NOT NULL` | `10` | `TRUE` | |
| | `a IS NULL` | `NULL` | `TRUE` | |
| | `a IS NOT NULL` | `NULL` | `FALSE` | |
| | `a = NULL` | `10` | `UNKNOWN` | |
| | `a != NULL` | `10` | `UNKNOWN` | |
| | `a = NULL` | `NULL` | `UNKNOWN` | |
| | `a != NULL` | `NULL` | `UNKNOWN` | |
| | `a = 10` | `NULL` | `UNKNOWN` | |
| | `a != 10` | `NULL` | `UNKNOWN` | |