NULL值影響查詢條件的結果,並且結果很微妙。
以下是SQL中AND,OR,NOT的真值表。
表1 AND的真值表
TRUE
FALSE
NULL
TRUE
TRUE
FALSE
NULL
FALSE
FALSE
FALSE
FALSE
NULL
NULL
FALSE
NULL
表2 OR的真值表TRUE
FALSE
NULL
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
NULL
NULL
TRUE
NULL
NULL
表3 NOT的真值表TRUE
FALSE
NULL
FALSE
TRUE
NULL
當兩個以上的查詢條件與AND、OR、NOT組合時,NOT的優先級最高,其次是AND,最後是OR。為了避免歧義和確保可移植性最好使用括號。
A BETWEEN B AND C 等價於 (A>=B) AND (A<=C),因此根據真值表可以得出BETWEEN 子句中處理NULL值的規則。
同樣,A IN(B,C,D) 等價於 (A=B)OR(A=C)OR(A=D), 根據真值表,只要這三個表達式中有一個為NULL,結果返回肯定是NULL。
因此,BETWEEN子句和IN子句並不增加SQL語句的表達能力。
SQL 中有NULL 值測試,即:字段 IS (NOT) NULL ,但它的返回結果只有兩種情況:TRUE或者FALSE。