access 查询空值和null值的区别
空值和Null值,两者是同一个东西。前者是后者的中文说法。
我想楼主实际是想搞清楚 空字符串(我们也可以称之为0长度字符串)与Null值(空值)的区别。
尽管这两者在外观上看起来都是没东西,但是这两者有很大的区别:
1)空字符串(0长度字符串)在代码中用一对没有间隔的英文双引号表示--> "" (外层有双引号的情况下用一对英文单引号表示--> '')其数据类型是明确的,即为字符型。存储“空字符串”是要占据物理磁盘空间的;
2)Null值(空值)在代码中用关键字 "Null" 表示,代表没东西,其数据类型未知,它不占用物理磁盘空间。
为了进一步讲清楚这两者的区别,下面举一个数据表来说明
新建学生表 Students(ID 数字,Name 文本,Tel 文本)暂时不添加除数据类型外的任何约束
分别运行下列SQL动作查询,插入4条记录
a) insert into Students(ID,Name) values(1,"张三")
b) insert into Students(ID,Name,Tel) values(2,"李四",Null)
c) insert into Students(ID,Name,Tel) values(3,"王五","3348912")
d) insert into Students(ID,Name,Tel) values(4,"陈六","")
运行选择查询
select ID,Name,Tel,IIf(IsNull(Tel),"Null",IIf(Tel="","''",Tel)) as Tel的实际存储值 from Students
返回下列记录
注意因为空字符串和Null值的外观看起来都是空白的,故我用表达式IIf(IsNull(Tel),"Null",IIf(Tel="","''",Tel)) 将Tel字段实际存储的值显示出来
查出电话为空值(Null)的记录
select * from Students where Tel is Null
查出电话不为为空值(Null)的记录
select * from Students where Tel is not Null
查出电话为空字符串的记录
select * from Students where Tel=""
查出有电话的记录
select * from Students where Tel is not Null and Tel<>""
通过上面的解释应该比较清楚空字符串与NUll值的区别了。
如果一定要确保有学生的电话资料,我们应在数据表设计视图将Tel字段的”必填字段“属性设置为”是“同时还要将”允许空字符串“属性设置为”否“,如果这样设置后上述四条操作查询语句里只有c才能被执行。
解释:
所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS关键字。
空 (NULL)
值表示数值未知(在实际意义中,如果使用null,就是代表变量值是未知的,比如手机号码设为null,说明不知道手机号码是什么)。空值不同于空白或零值。没有两个相等的空值。比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。
在写入数据的时候,空字符串也是一个确定的值,所以就算定义了 NOT NULL 也可以被写入。
广告 您可能关注的内容 |