在SQL中,NULL值在于任何其他值甚至NULL值比较时总是假的(FALSE)。包含NULL的一个表达式总是产生一个NULL值,除非在包含在表达式中的运算符和函数的文档中指出。mysql中 新建字段默认值为null,那么要查询此数据的字段时应该怎么操作呢?
在mysql中,查询某字段为空时,不可用 = null,而是 is null,不为空则是 is not null。
具体格式如下:
select * from [table name] where [column name] is null;
select * from [table name] where [column name] is not null;
错误的写法:
select * from [table name] where [column name]=null;
select * from [table name] where length([column name])=0;
举例说明如下:
1)有一个字段blist,如果查询where blist <> 'B'时为什么那些blist为NULL的记录查不出?怎么写才能查出NULL值记录?
回答:
Null 值不能使用普通的算术运算符来比较,对这些它什么都不返回。
只能靠你自己的逻辑流程,在查询语句中再添加where blist<>'B' or blist is null;
2)在下列例子,所有的列返回NULL:
如果你想要寻找值是NULL的列,你不能使用=NULL测试。下列语句不返回任何行,因为对任何表达式,expr = NULL是假的:
mysql> SELECT * FROM my_table WHERE phone = NULL;
要想寻找NULL值,你必须使用IS NULL测试。下例显示如何找出NULL电话号码和空的电话号码:
mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";
为了有助于NULL的处理,你能使用IS NULL和IS NOT NULL运算符和IFNULL()函数。
3) 出现null值的情况,一般是在多表联合查询的时候。比如有一个文章表和一个评论表,评论表的外键是文章表的主键id。设想我们的需求是实现带评论总数的文章列表时,无评论的文章,统计的评论总是将是null值。
例:
select a.*,b.num as num from article as a left join (select count(*) as num,article_id from article_reply group by article_id) as b on a.id=b.article_id;
b.num将是null值。
怎样将null值转换为零呢。
有两种方式:
(1)在view层判断,如果是null值就输出零。这种方法感觉太不舒服,这里不介绍,也不推荐。
(2)在sql层级处理,view层无需做任何的处理。
例:
select a.*,ifnull(b.num,0) as num from article as a left join (select count(*) as num,article_id from article_reply group by article_id) as b on a.id=b.article_id;
上列中的0就是默认值,当然你也可以赋其它默认值。