空值给关系运算带来了特殊的问题,包括算术运算、比较运算、集合运算。
对算术运算的问题:
如果算术表达式的任一输入为空,则该算术表达式结果为空。例如,r.A+5(r.A表示某个关系的某个属性)如果r.A为空,那么r.A + 5 结果为空。
对比较运算的问题:
例如比较“1<null”,null表示的是什么无从得知,可真可假,总的来说,这种比较没有意义。因而SQL将涉及空值的比较运算的记过视为unknown,这创建了除了true和false之外的第三个逻辑值。
由于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。
可以验证“1<null”和not (1<null)" 结果都是unknown。
SQL在谓词中使用 is null或者is not null来测试空值。
-- 找出dept_name为空值的教师信息
SELECT *
FROM instructor
WHERE dept_name IS NULL ;
结果表
网友评论