MySQL 8.0 リファレンスマニュアル


3.3.4.6 NULL 値の操作

NULL 値に慣れるまでは驚くかもしれません。 概念的には、NULL存在しない不明な値を意味し、ほかの値とは多少異なる方法で扱われます。

NULL を調べるために、次に示すように IS NULL および IS NOT NULL 演算子を使用します。

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

=<、または <> などの算術比較演算子を使用して NULL をテストすることはできません。 これを自分で確認するために、次のクエリーを実行してみてください。

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

NULL に関する算術比較は、結果もすべて NULL になるため、このような比較から意味のある結果を得ることはできません。

MySQL では、0NULL は false を意味し、それ以外はすべて true を意味します。 ブール演算のデフォルトの真理値は 1 です。

NULL がこのように特殊な方法で扱われているため、前のセクションで、どの動物がもう生きていいないのかを判断するために、death <> NULL ではなく death IS NOT NULL を使用することが必要だったのです。

GROUP BY では、2 つの NULL 値は等しいとみなされます。

ORDER BY を実行する場合、NULL 値は ORDER BY ... ASC では最初に表示され、ORDER BY ... DESC では最後に表示されます。

NULL を操作するときによくある間違いは、NOT NULL と定義されたカラムにはゼロや空の文字列は挿入できないと想定することです。 これらは実際に値ですが、一方 NULL値がないことを意味します。 このことは、次に示すように IS [NOT] NULL を使用してとても簡単にテストできます。

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+

このように、ゼロや空の文字列は実際に NOT NULL であるため、NOT NULL カラムに挿入することができます。 セクションB.3.4.3「NULL 値に関する問題」を参照してください。


関連キーワード:  NOT, 操作, リファレンス, テーブル, カラム, マニュアル, 意味, 情報, データベース, 作成