标签归档:null

mssql sqlserver 数据表存在null导致not in 子查询异常记录


摘要:
下文通过举例分析说明null导致not in查询异常的说明,如下所示:
实验环境:sql server 2008 R2


例:

      create table [maomao365.com_A]
	  (keyId int null,info varchar(30) null)

    create table [maomao365.com_B]
	  (keyId int null,info varchar(30) null)
   
    ---生成基础数据
     insert into [maomao365.com_A]
	 (keyId,info)values
	 (1,N'sql教程'),
	 (null,N'null空值陷阱判断'),
	 (2,N'null空值可能异常处理')
    
	  go 
     insert into [maomao365.com_B]
	 (keyId,info)values
	 (1,N'A'),
	 (null,N'B'),
	 (3,N'C')

      go
   
     ---以下语句未按预期输出 null 和keyId=2的值
     
     select  *  from  [maomao365.com_A] AS a
      where   a.keyId NOT IN 
	    (SELECT    b.keyId FROM 
	      [maomao365.com_B] AS b)
     go
    /*
     出现异常的原因为 b.keyId中存在为null的值
      则不会返回任何数据 
    */
    ---如果子查询表中存在null值,我们需采用以下写法
     select  *  from  [maomao365.com_A] AS a
      where   NOT EXISTS   
	    (SELECT    b.keyId FROM 
	      [maomao365.com_B] AS b where a.keyId =b.keyId)
	           
	 SELECT  a.*
	  FROM    [maomao365.com_A] AS a
        LEFT OUTER JOIN [maomao365.com_B] AS b ON a.keyId = b.keyId
      WHERE   b.keyId IS NULL
    
    
    
    go
	truncate table [maomao365.com_B]
	drop table [maomao365.com_B]
    truncate table [maomao365.com_A]
	drop table [maomao365.com_A]

mssql sqlserver sql脚本检索null的方法分享


摘要:
下文讲述在sql server数据库中,检索数据表中存在null数据的方法分享,如下所示:
实验环境:sql server 2008 R2


下文将通过举例的方式分享sql检索null(空值)的方法分享,和null空值检索使用索引的情况分析

    create table test
(keyId int identity,info varchar(30))
go

---生成1万行基础数据

declare @i int
set @i =0 
while @i<10000
begin 
  
  if @i%9 =0 
  begin
     insert into test(info)values(null)
  end
  else
  begin
    insert into test (info)
      values(convert(varchar(20),@i))
  end
 
 set @i = @i +1 
end




---查询列中 包含null值、不包含null值、检索特定值得方法的方法

select info from test  where info is null 

select info from test  where info is not  null 
  
select info from test  where info ='1'


---建立索引
 IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[test]') AND name = N'IX_test_Info')
DROP INDEX [IX_test_Info] ON [dbo].[test]  
GO

 
CREATE NONCLUSTERED INDEX [IX_test_Info] ON [dbo].[test] 
(
	[info] ASC
)
go

/*
建立索引后
  查询列中 包含null值、不包含null值、检索特定值得方法的方法
  所有检索操作都会走相关索引,如下所示:

*/
select info from test  where info is null 

select info from test  where info is not  null 
  
select info from test  where info ='1'


--truncate table test 
--drop table test 

mssql_sqlserver_null_检索及索引查找

mssql_sqlserver_null_检索及索引查找



总结:
包含null值的列数据 ,需使用is null
不包含null值的列数据,需使用is not null
----------------------
如果包含null列上建立索引后,使用is null 或is not null,也会走相应的索引查找。

mssql sqlserver null数据值简介


摘要:
下文将详细说明null(空值)在sqlserver数据库中的作用,如下所示:
实验环境:sql server 2008 R2



null数据简介:

null在sqlserver表示未知。通常被大家称之为为”空值”。
null值不等于任何数值,sqlserver中null为”unknown”。



null数据举例应用:

   ---查询列值为null的方法
   select * from tableName where [列名]  is null 
   ---查询列值为非null的方法
   select * from tableName where [列名]  is not null 

   ------------null 同0比较方法
   if (null >1)   ---此条件不会成立
   begin
     print 'test'  
   end 

   if not (null >1)   ---此条件不会成立
   begin
     print 'test'
   end 

     if (null =null)   ---此条件不会成立
   begin
     print 'test'  
   end 

   if not (null =null)   ---此条件不会成立
   begin
     print 'test'
   end 
  -------null涉及的所有比较运算都会失效-------------------

  -------null子查询注意事项:
     select * from tableName where [列名] not  in
         (select [列名2] from tableNameNew)
  --如果 “[列名2] ”中 存在null,则会返回0行记录
  select * from tableName where [列名] not in ('a','b',null)
  ---会变转换为
  select * from tableName where [列名] !='a'
    and  [列名] !='b'  and [列名] !=null  
 


null注意事项:
1.NULL值同任何值进行比较运算都会返回false
2.获取某一列值为null并返回所在行数据的方法,需采用
is null
3.在实际表设计中,需避免列值为null