各行において値が入っていない列はNULLが入っています。
NULLが入っている列はどんな条件式とも一致しません、そのためある列の値がNULLである
という条件に一致させる場合には、”IS NULL”演算子を使用します。
たとえば、id, name, age, weight, addressというフィールドがあるテーブルに対して、
以下のようにaddressの値を入れずにINSERTすると、addressフィールドがNULLのデータが
入ります。
1 2 |
mysql> insert into member (name, age, weight) values('mizumoto', 35, 55); Query OK, 1 row affected (0.00 sec) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
mysql> select * from member; +----+----------+------+--------+---------+ | id | name | age | weight | address | +----+----------+------+--------+---------+ | 1 | tanaka | 30 | 57 | 東京 | | 2 | suzuki | 32 | 77 | 東京 | | 3 | nakamura | 33 | 52 | 群馬 | | 4 | miura | 31 | 67 | 埼玉 | | 5 | kimura | 27 | 62 | 茨城 | | 6 | takai | 25 | 63 | 千葉 | | 7 | tadano | 26 | 43 | 千葉 | | 8 | murakami | 35 | 42 | 茨城 | | 9 | kikuchi | 32 | 41 | 茨城 | | 10 | suzuki | 31 | 51 | 茨城 | | 11 | saeki | 29 | 49 | 埼玉 | | 12 | ooyama | 29 | 48 | 埼玉 | | 13 | kamata | 22 | 47 | 埼玉 | | 14 | mizumoto | 35 | 55 | NULL | +----+----------+------+--------+---------+ 14 rows in set (0.00 sec) |
addressが埼玉以外を抽出しても、addressがNULLの行は抽出されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> select * from member where address "埼玉"; +----+----------+------+--------+---------+ | id | name | age | weight | address | +----+----------+------+--------+---------+ | 1 | tanaka | 30 | 57 | 東京 | | 2 | suzuki | 32 | 77 | 東京 | | 3 | nakamura | 33 | 52 | 群馬 | | 5 | kimura | 27 | 62 | 茨城 | | 6 | takai | 25 | 63 | 千葉 | | 7 | tadano | 26 | 43 | 千葉 | | 8 | murakami | 35 | 42 | 茨城 | | 9 | kikuchi | 32 | 41 | 茨城 | | 10 | suzuki | 31 | 51 | 茨城 | +----+----------+------+--------+---------+ 9 rows in set (0.00 sec) |
もちろん、””とも一致しません。
1 2 |
mysql> select * from member where address=""; Empty set (0.00 sec) |
なので、addressがNULLな行を抽出するにはIS NULL演算子を使います。
1 2 3 4 5 6 7 |
mysql> select * from member where address IS NULL; +----+----------+------+--------+---------+ | id | name | age | weight | address | +----+----------+------+--------+---------+ | 14 | mizumoto | 35 | 55 | NULL | +----+----------+------+--------+---------+ 1 row in set (0.00 sec) |
/