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
View Code

这块得到的返回值结果,可知,第三行中c1列无法却等null值,是等于1还是不等于1因此才会被查询所排除。而对于编码器来说只是是与不是的问题不存在中间类型。

null值的存在相当耗费系统资源,一不小心就会引起不必要的麻烦

 可以使用一些特殊的字符(哑原值)来替代使用。比如字符串类型可以使用‘N/A’或者'NN'来替换

时间类型可以使用'1900-01-01'来替换等

posted @ 2018-03-07 11:26  大胖儿在努力  阅读(330)  评论(0)    收藏  举报