先看一个例子:
建表如下:
mysql> desc user;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(4) | YES | | NULL | |
+-------+------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
插入数据
insert into user (id) values(""),(""),("");
insert into user values("","wang");
查询如下
mysql> select * from user;
+----+------+
| id | name |
+----+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | wang |
+----+------+
4 rows in set (0.00 sec)
如果我们想查询name不是wang的用户,如表我们期望的查询结果可能是id= 1,2,3的三个用户,我们的查询语句应该是这样
select * from user where name != 'wang';
但是查询结果却是这样:
mysql> select * from user where name != 'wang';
Empty set (0.00 sec)
mysql> select * from user where name <> 'wang';
Empty set (0.00 sec)
由此可见 != 和<>的条件判断时查询到的结果集是不包括字段值为null的行的。
因此这就要求我们在我们在建表的时候将可能用到的查询字段尽量字段设为not null 属性,这也是一个好的习惯。