zoukankan      html  css  js  c++  java
  • T-SQL:是NULL不是NULL(七)

    首先SQL SERVER 是一个三值逻辑 即谓词计算结果为TRUE,FALSE,UNKNOWN 

    标准的谓词都是遵循这种规则的

    如 slary>0  会返回计算结果为TRUE 结果的行拒绝FALSE和UNKNOWN 结果

       但不是所有的谓词处理都是这样的  如果出现在CHECK约束中   计算结果为不为FALSE 拒绝FALSE 意味着接受TRUE和UNKNOWN

    TRUE 和FALSE 我们都知道什么意思 那 UNKNOWN 具体怎么避免呢?

    1.UNKNOWN 

    IS UNKNOWN  得到结果 NULL  这很正常   NOT IS 取反结果 还NULL  这让人很费解 NOT UNKNOWN依旧等于UNKNOWN

    NULL=NULL 计算结果为UNKNOWN  NULL表示缺失,简单点说就是 一未知的值不可能等于另一个未知的值

    所以 SQL 提供两个谓词 来判断是不是NULL  IS NULL 和 IS NOT NULL  替代=NULL <>NULL

    记住  <>    计算结果不包括空 例如

    SELECT custid, country, region, city
    FROM Sales.Customers
    WHERE region <> N'WA';

    可以看到第一幅图并无NULL 行

    接着我们查询为NULL的

    SELECT custid, country, region, city
    FROM Sales.Customers
    WHERE region = NULL;

    所以我们用 IS NULL 代替 =

    SELECT custid, country, region, city
    FROM Sales.Customers
    WHERE region IS NULL;

    如果想反回 不等于 wa 包括NULL 

    SELECT custid, country, region, city
    FROM Sales.Customers
    WHERE region <> N'WA'
       OR region IS NULL;

    奇怪的是 在分组和排序谓词中 NULL=NULL 是成立的

    在 唯一约束中 NULL 也是被认为相等的

  • 相关阅读:
    适配器
    MouseListener
    键盘事件KeyListener
    【转】CxImage图像库的使用
    【转】Qt Mode/View
    【转载】VC++中的图像类型转换--使用开源CxImage类库
    Qt5 文本编辑
    【转载】设备坐标(窗口/window)和逻辑坐标(视口/viewport)
    【转载】Qt中的QString,QByteArray,Qchar, char*
    QT中QWidget、QDialog及QMainWindow的区别
  • 原文地址:https://www.cnblogs.com/feizianquan/p/9346713.html
Copyright © 2011-2022 走看看