本文依旧有些水,说的是:mysql中如何查找某个字段为空的数据。字段为空,这句话说起来是比较简单,但是(⊙﹏⊙),“空”这个词的定义是什么?总是傻傻的分不清楚。那,到底什么是空呢?佛祖云:四大皆空。

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - mysql-field-null
mysql的sql语句,如何检测字段为空NULL的情况(图10-1)

本文测试环境:win10/mysql@5.5.53

基础结构

本文的目标测试表结构如下:

DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `comment` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
INSERT INTO `test_table` VALUES (1,'NULL','NULL string'),(2,NULL,'real NULL'),(3,'','just blank');

这个测试表里面,共有三条数据,主要区别就是name字段的数据不同。如下图所示:

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - sql-data
mysql的sql语句,如何检测字段为空NULL的情况(图10-2)

测试语句一

本事例中的sql是个错误的使用方法,但是很多新人都这么使用...

select * from test_table where name = NULL;

这条语句啥数据都没有查询到......

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - eq-null
mysql的sql语句,如何检测字段为空NULL的情况(图10-3)

有些意外的是,下面的这条语句也是啥都没有得到。

select * from test_table where name <> NULL;

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - neq_null
mysql的sql语句,如何检测字段为空NULL的情况(图10-4)

测试语句二

本实例也是个错误的演示,错误的原因就是没有分清NULL字符串和NULL对象。

select * from test_table where name = "NULL";

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - eq-null-string
mysql的sql语句,如何检测字段为空NULL的情况(图10-5)

下面的这条sql语句的结果,就有些匪夷所思了。难道mysql自己也分不清NULL字符串和NULL对象么?

select * from test_table where name <> "NULL";

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - neq_null_string
mysql的sql语句,如何检测字段为空NULL的情况(图10-6)

测试语句三

select * from test_table where name = "";

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - eq_blank_string
mysql的sql语句,如何检测字段为空NULL的情况(图10-7)

下面的这条sql的返回值,也和苏南大叔的预想结果有些出入...,看来这里似乎是真的存在着一些误解...

select * from test_table where name <> ""

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - neq_blank_string
mysql的sql语句,如何检测字段为空NULL的情况(图10-8)

测试语句四(标准答案)

下面的这两条sql,才是标准答案:isis not操作符。

select * from test_table where name is NULL;

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - is_null
mysql的sql语句,如何检测字段为空NULL的情况(图10-9)

select * from test_table where name is not NULL;

苏南大叔:mysql的sql语句,如何检测字段为空NULL的情况 - is_not_null
mysql的sql语句,如何检测字段为空NULL的情况(图10-10)

总结

大多数人意识中的"空",应该就是空字符串,就是连个空格都算不上的那个"空"。而数据库层面上的"空",应该是对象NULL,而不是字符串NULL。字符串NULL仅仅是个字符串,有个假的外表的字符串,这个是苏南大叔的理解和解读。推荐的知识点就是两个:is NULLis not NULL

本文针对的实验对象是mysql,因为不同的数据库的sql语句,都是有所差异的。所以,其他的数据库的话,还请具体问题具体分析。更多mysql的经常经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   mysql    sql

本站的忠实读者小伙伴,正在阅读下面这些文章: