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

    【英文辞典】 null:无效的, 无价值的, 等于零的.


    【SQL定义】SQL中, NULL 与空格, 零, 都不相同. 是指为未定义或是不可用的.

    构成因素:造成某一列成为NULL 的因素可能是:

    (1),值不存在;

    (2), 值未知;

    (3), 列对表不可用.


    它与普通的值最大的异同是:

    相同点:
    1:统统属于值范畴.数字1是一个值,字符串'aaa'同样是一个值,同理 null也是一个值.

    2:都是合法的值,普通的数字,字符可以存在于表中字段,null也可以,而且是有意义的.

    不同点:
    先创建测试表:
    USE [myTestDB]
    GO
    /****** 对象: Table [dbo].[testNull] 脚本日期: 10/11/2008 13:45:14 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    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]

    插入相关测试值:
    insert into testNull
    values('1','')
    insert into testNull

    values('2',null)


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

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

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

    示例查询:

    1:select * from testNull where a=null --返回空结果集

    2:select * from testNull where b is null --返回结果集 2 2 NULL

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

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

    示例查询:

    1:select count(*),count(b) from testNull 它的返回值为2 1
    2: 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)
    values('4','4')
    select * from testNull
    select count(b) from testNull
    group by b
    返回结果:
    0 1 1

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

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

    总结:SQL中提供了如此众多的存储过程,函数供我们调用,而我们又真正的理解几个呢?只有真正了解它们,才会对开发中出现的种种问题迅速找出问题所在并解决它.

  • 相关阅读:
    关于高等数学的学习笔记(一)(未完)
    第十七章 波粒二象性笔记
    网课摸鱼一时爽,提交笔记火葬场——网课物理笔记
    讲丶数学
    啥是快速幂
    2019年十一月(CSP S游记及AFO)
    luogu P3959(2017noipTG D2T2
    圆锥曲线:椭圆大题解题报告
    圆锥曲线:椭圆小题解题报告
    sql查询json格式中的内容
  • 原文地址:https://www.cnblogs.com/ycxyyzw/p/2074017.html
Copyright © 2011-2022 走看看