Skip to main content

three value prediate and sql

· 2 min read

三值逻辑

三值的谓词: 谓词求值后有三个元素{T,F,U} ,也就是true , false , 和unknow

求值和谓词

SELECT 1=NULL

在mysql , 这个会返回一行,这行是值是null

① 然后根据规范 where casehaving 子句都只取三值逻辑真值中的true

   SELECT 1 NOT IN (1,  NULL)    ## false 所以不会被条件筛选出来
SELECT 1 NOT IN ( NULL) ## null , 因为上面的规则①所以也不会被筛选出来

所以在where子句中使用not innot int 中包含null的时候会筛选不出来

exist 规范规定exist是个二值函数,所以要映射成true或者false , mysql中则是只要返回一行真值就是true