sql学习--null值
null和表达式
大多数含有null值的函数返回值也是null,所以select substring('cuijl',3,2+null)--返回值也是null
select 5+null--返回值null
null和函数
select abs(null) --null
isnull可以判断参数是否为null
isnull还可以由表达式和带返回值的表达式组成

1 create table #nulltest(c1 int null) 2 insert into #nulltest values(1) 3 insert into #nulltest values(null) 4 insert into #nulltest values(3)

1 declare @x int,@y int 2 set @x=5 3 set @y=6 4 --isnull需要2个参数 5 select isnull( 6 case when @x>1 7 then null --进入得null,这是一个表达式 8 else @x 9 end, 10 case when @y<5 11 then @x*@y --返回值10 12 else 11 end 13 )

1 declare @a int,@b int 2 set @a=5 3 set @b=6 4 select isnull( 5 case when @a>1 6 then null --进入,得null 7 else @a end, 8 (select count(*) from study.dbo.authors)--获得1行数据 9 ) 10 --返回值1,如果查到0行则返回0
有关表达式中处理null值的问题
1 select avg(c1) from #nulltest--2,在列计算时不受null值影响 2 select count(*) from #nulltest--rowcount=3,count时遍历的游标 3 select count(c1) from #nulltest--rowcount=2,count(*)与count(c1)区别就在于是否忽略了null值的数据行
null作为查询条件时
select * from authors where state=null,这样的语法时不可以的,应该改为where state is null
然而,update authors set state=null where state='ca',这样确实可以的(表设计时,字段可为null的前提)

1 create table #values(k1 int identity,c1 int null) 2 insert into #values(c1) values(1) 3 insert into #values(c1) values(1) 4 insert into #values(c1) values(null) 5 insert into #values(c1) values(9) 6 7 select * from #values where c1=1 8 select * from #values where c1<>1 9 select * from #values where c1<>1 or c1 is null
这块得到的返回值结果,可知,第三行中c1列无法却等null值,是等于1还是不等于1因此才会被查询所排除。而对于编码器来说只是是与不是的问题不存在中间类型。
null值的存在相当耗费系统资源,一不小心就会引起不必要的麻烦
可以使用一些特殊的字符(哑原值)来替代使用。比如字符串类型可以使用‘N/A’或者'NN'来替换
时间类型可以使用'1900-01-01'来替换等
作者:大胖儿在努力
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。