Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


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.5.5.3「NULL 値に関する問題」を参照してください。


User Comments
  Posted by Jon Gabrielson on December 18, 2002

The function 'COALESCE' can simplify working with null
values.
for example, to treat null as zero, you can use:
select COALESCE(colname,0) from table where
COALESCE(colname,0) > 1;

in a date field, i used:
ORDER BY
(coalesce(TO_DAYS(date),TO_DAYS(CURDATE()))-TO_DAYS(CURDATE()))
to treat NULL as the current date.

  Posted by Bob Kolk on January 10, 2003
Use IFNULL() in your SELECT statement is make the NULL any value you wish.

IFNULL(expr1,expr2)
If expr1 is not NULL, IFNULL() returns expr1, else it returns expr2. IFNULL() returns a numeric or string value, depending on the context in which it is used:
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'

  Posted by Florian Langner on November 17, 2004
If you want to have NULL values presented last when doing an ORDER BY, try this:

SELECT * FROM my_table ORDER BY ISNULL(field), field [ ASC | DESC ]
Sign Up Login You must be logged in to post a comment.