条件 E1 in (E2,E3,E4) 等同于
(E1=E1) and ((E1=E2) or(E1=E3) or(E1=E4) or false )
1: 如果E1 为Null ,因为E1=E1是未知的,所以与该子查询的结果无关,整个计算结果为未知
2:如果E1 不为NULL ,且子查询不返回值时,因为最后一项是fasle
所以结果是fasle
3:如果E1 不为NUll,且子查询的结果有一为Null,有一不为NULL,则结果为真或未知
4:如果E1 不为Null ,且所有子查询为NUll,则结果是未知的
E1 not in (E2,E3,E4)
等于 not (E1 in (E2,E3,E4)) 即
(E1=E1)and (E1!=E2) and (E1!=E3) and(E1!=E3) and true
1: 如果E1 为Null ,因为E1=E1是未知的,所以与该子查询的结果无关,整个计算结果为未知
2:如果E1 不为NULL ,且子查询不返回值时,因为最后一项是true
所以结果是true
3:如果E1 不为NUll,且子查询的结果有一为Null,有一不为NULL,则结果为真或未知
4:如果E1 不为Null ,且所有子查询为NUll,则结果是未知的
注意 不同的数据库(我上面的是mysql ),可能有不同的解释
在sql(oracle ) 中, true or null 是true 而false or null 是null ,当结果中有一个是null值时,null就会延续下去,除非对null作了特殊处理
1224

被折叠的 条评论
为什么被折叠?



