zoukankan      html  css  js  c++  java
  • SQL中的null的用法及要注意的方面

    内容概述:

    1 对字段值为null的字段进行数值计算

    2 如何在查询条件中使用字段值为null的记录

    3 使用统计函数count,查询包含null记录的数据集

    4 使用in关键字查询时,查询包含null记录的数据集

    5 字段值为null的记录在排序时的显示

    6 使用Group时,null视为相等的值

    7 null值的总结

     

    1、初始使用环境

     (1)create the table for testing

    CREATE TABLE [dbo].[testNull](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [a] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
        [b] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
     CONSTRAINT [PK_testNull] PRIMARY KEY CLUSTERED
    (
        [ID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] 

     (2)insert the new records to this test table

    insert into testNull values('1','')
    insert into testNull values('2',null)

    2、测试验证

    (1) 普通的值一般都可能进行运算符操作,例如:ID列为int,所以可以这样:ID=ID+1,但如果一列的值为null,null+1=null,就是说null与任何运算符运算后都为null,这就是大家说的黑洞,会吃掉所有的东西.

    update testNull set b=b+1 where b =''

    结论:查询后发现b的值没有变化,仍然为null.

    (2)  普通的值可以进行"="操作,例如条件中一般都会这样出现:sUserName='张三',如果sUserName的值为null,要想找出所有名字为null的记录时,不能这样用:sUserName=null,因为null不是一个具体的值,任何值与它比较时都会返回false.此时可借用is null 或者是is not null.

    select * from testNull where b=null --返回空结果集       
    select * fr
    om testNull where b is null --返回结果集 2 2 NULL

          结论:说明null是不能用"="来比较,可用is null来替换

    (3)  在用统计函数count时会不同,例如count(ID):统计记录数.当统计的记录中的包含有null值时,它会忽略null.

    select count(*),count(b) from testNull  --它的返回值为2 1

    select count(*),count(isnull(b,'')) from testNull  --它的返回值为2 2

    结论:对于列包含null ,统计行数是可用count(*),或者是先把null值转换成对应的值再统计,例如count(isnull(b,''));

    (4)  对于in 的影响不同.

    示例查询: 查询testNull表中b的值包含在null中的记录.

     select * from testNull where b in(null) --没有任何记录

    结论:in在查询时会忽略null的记录,查询的时候可用is not null来查询.

    (5)  排序时顺序有不同:当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。

    1:select * from testNull
       1 1 ''
       2 2 NULL
    2:select * from testNull order by b
       2 2 NULL
       1 1 ''
    3:select * from testNull order by b desc
       1 1 ''
       2 2 NULL

    (6)  当使用GROUP BY时,所有的NULL值被认为是相等的。这时先多插入几条数据,方便查看结果.

       insert into testNull values('3',null)
       insert into testNull values('4','4')

       select count(b),b from testNull group by b

      返回结果: 0 1 1

    结论:可见在group by  的时候,null视为等同.

    (7)永远不会有什么数据等于NULL。1不等于NULL,2也一样。但NULL也不等于NULL。所以我们只能比较它“是”或“不是”。

  • 相关阅读:
    cogs 826. [Tyvj Feb11] GF打dota 次短路详细原创讲解! dijkstra
    cogs 2450. 距离 树链剖分求LCA最近公共祖先 快速求树上两点距离 详细讲解 带注释!
    cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树
    cogs 293. [NOI 2000] 单词查找树 Trie树字典树
    P4550 收集邮票
    P1850 换教室 期望dp
    洛谷 UVA11021 Tribles
    P3802 小魔女帕琪 概率与期望
    P3369 【模板】普通平衡树 01Trie树
    P2765 魔术球问题
  • 原文地址:https://www.cnblogs.com/SimplePerson/p/2208277.html
Copyright © 2011-2022 走看看