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 では、0
や NULL
は 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 値に関する問題」を参照してください。