1-3 三值逻辑和NULL *
known、第三个真值
•AND的情况:false>unknown>true
•OR的情况:true>unknown>false
优先级高的真值会决定计算结果。例如true AND unknown,因为unknown的优先级更高,所以结果是unknown。
而true OR unknown的话,因为true优先级更高,所以结果是true。记住这个顺序后就能更方便地进行三值逻辑运算了。
~三值逻辑(true,unknown,false)的优先级。
比较谓词和NULL(2):CASE表达式和NULL *
-- col_1为1时返回○、为NULL时返回× 的CASE表达式?
-- 错误
CASE col_1
WHEN 1 THEN '○'
WHEN NULL THEN '×'
END
--正确
CASE
WHEN col_1=1 THEN '○'
WHEN col_1 IS NULL THEN '×'
END
~也就是说NULL不能直接比较,只能使用‘IS NULL’来判断。
限定谓词和NULL
ALL谓词其实是多个以AND连接的逻辑表达式的省略写法。
--1. 执行子查询获取年龄列表 SELECT * FROM Class_A WHERE age < ALL( 22, 23, NULL ); --2. 将ALL谓词等价改写为AND SELECT * FROM Class_A WHERE(age < 22)AND(age < 23)AND(age < NULL); --3. 对NULL使用“<”后,结果变为unknown SELECT * FROM Class_A WHERE(age < 22)AND(age < 23)AND unknown;
~所以当使用谓词ALL时,需要特别注意列是否可能空,不然可能会返回意想不到的结果。