共计 2572 个字符,预计需要花费 7 分钟才能阅读完成。
本篇文章为大家展示了 Oracle 中 Null 与空字符串的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
含义解释:
问:什么是 NULL?
答:在我们不知道具体有什么数据的时候,也即未知,可以用 NULL,我们称它为空,ORACLE 中,含有空值的表列长度为零。
ORACLE 允许任何一种数据类型的字段为空,除了以下两种情况:
1、主键字段(primary key),
2、定义时已经加了 NOT NULL 限制条件的字段
说明:
1、等价于没有任何值、是未知数。
2、NULL 与 0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL 的处理使用 NVL 函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*) 中,用 nvl(列名,0) 处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以 NULL 值总是排在最后。
使用方法:
SQL select 1 from dual where null=null;
没有查到记录
SQL select 1 from dual where null=
没有查到记录
SQL select 1 from dual where =
没有查到记录
SQL select 1 from dual where null is null;
1
———
1
SQL select 1 from dual where nvl(null,0)=nvl(null,0);
1
———
1
对空值做加、减、乘、除等运算操作,结果仍为空。
SQL select 1+null from dual;
SQL select 1-null from dual;
SQL select 1*null from dual;
SQL select 1/null from dual;
查询到一个记录.
注:这个记录就是 SQL 语句中的那个 null
设置某些列为空值
update table1 set 列 1 =NULL where 列 1 is not null;
现有一个商品销售表 sale,表结构为:
month char(6) – 月份
sell number(10,2) – 月销售金额
create table sale (month char(6),sell number);
insert into sale values(200001 ,1000);
insert into sale values(200002 ,1100);
insert into sale values(200003 ,1200);
insert into sale values(200004 ,1300);
insert into sale values(200005 ,1400);
insert into sale values(200006 ,1500);
insert into sale values(200007 ,1600);
insert into sale values(200101 ,1100);
insert into sale values(200202 ,1200);
insert into sale values(200301 ,1300);
insert into sale values(200008 ,1000);
insert into sale(month) values(200009(注意:这条记录的 sell 值为空)
commit;
共输入 12 条记录
SQL select * from sale where sell like %
MONTH SELL
—— ———
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
200008 1000
查询到 11 记录.
结果说明:
查询结果说明此 SQL 语句查询不出列值为 NULL 的字段
此时需对字段为 NULL 的情况另外处理。
SQL select * from sale where sell like % or sell is null;
SQL select * from sale where nvl(sell,0) like %
MONTH SELL
—— ———
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
200008 1000
200009
查询到 12 记录.
Oracle 的空值就是这么的用法,我们最好熟悉它的约定,以防查出的结果不正确。
但对于 char 和 varchar2 类型的数据库字段中的 null 和空字符串是否有区别呢?
作一个测试:
create table test (a char(5),b char(5));
SQL insert into test(a,b) values(1 , 1
SQL insert into test(a,b) values(2 , 2
SQL insert into test(a,b) values(3 , – 按照上面的解释,b 字段有值的
SQL insert into test(a) values(4
SQL select * from test;
A B
———- ———-
1 1
2 2
3
4
SQL select * from test where b= —- 按照上面的解释,应该有一条记录,但实际上没有记录
未选定行
SQL select * from test where b is null;—- 按照上面的解释,应该有一跳记录,但实际上有两条记录。
A B
———- ———-
3
4
SQL update table test set b= where a= 2
SQL select * from test where b=
未选定行
SQL select * from test where b is null;
A B
———- ———-
2
3
4
上述内容就是 Oracle 中 Null 与空字符串的区别是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。