天天看点

SQL笔记(五) 空值空值

空值

  • 空值
    • 空值的运算
      • 空值的算术运算
      • 空值的比较运算
        • unknown
        • null 关键字
          • 查询1. 找出instructor关系中salary为空值的所有教师。
      • 空值的集合运算
        • 空值在谓词中和在元组中的区别

空值的运算

空值的算术运算

如果一个算术表达式的任一输出为空,则该表达式结果为空。

例如:

表达式:

r.A + 5

r.A

为空,则该表达式结果为空。

空值的比较运算

SQL将涉及空值的任何比较运算的结果视为

unknown

unknown

where子句的谓词中可以对比较结果使用and、or和not的布尔运算。这些布尔运算的定义也被扩展到可处理的unknown值。

  • and:

    true and unknown

    结果为

    unknown

    false and unknown

    结果为

    false

    unknown and unknown

    的结果为

    unknown

  • or :

    true or unknown

    结果为

    true

    false or unknown

    结果为

    unknown

    unknown or unknown

    的结果为

    unknown

  • not : not unknown 的结果为unknown。

null 关键字

SQL使用关键字null测试空值。

查询1. 找出instructor关系中salary为空值的所有教师。
select name
from instructor
where salary is null;
           

同样如果,谓词is not null 所作用的值非空,那么它为真。

某些SQL实现允许使用is unknown 和is not unknown 测试一个表达式结果是否为unknown

空值的集合运算

空值在谓词中和在元组中的区别

比较两个元组对应的属性时,若这两个属性值相等,需要满足条件之一:

1. 这两个属性值非空且相等。

2. 这两个属性值为空。

例如:

{(‘a’ , null), (‘a’ , null)} 这两个元组拷贝被认为是相同的。

使用distinct会保存相同元组的一份拷贝。

在谓词中

null = null

会返回

unknown

在元组中,所有属性取值相等,就被认为是相同元组,即使某些值为空。上述方式还应有于集合的并、交和差运算

继续阅读