剛剛想從數據庫中的表EXPERT_DETAILS中檢索出修改人Modifier(類型 VARCHAR2(20),可為空)為空的那些記錄,因為該字段的類型為VARCHAR2(20),我使用的SQL語句為
復制代碼 代碼如下:
select * from expert_details twhere t.modifier = ''
沒有檢索出一條記錄,而這與存儲在該表中的記錄是不相符的。後來想到即便是空字符型存儲在數據庫中也應該是NULL而不是''。
然後我使用下列SQL 語句,仍然沒有檢索出一條記錄。
復制代碼 代碼如下:
select * from expert_details t
where t.modifier = null
最後我想到了SQL中的NULL 值測試。使用如下語句,終於檢索出了想要的結果。
復制代碼 代碼如下:
select * from expert_details t
where t.modifier is null
在SQL語句中,where 子句:where t.modifier = null ,這裡不可以使用NULL關鍵字,因為它不是一個真正的值,它僅僅是一個符號,因為它的值是未知的。當t.modifier本身就是null時,即where子句為:where null= null ,當等號兩邊的值都是未知的時候,結果是TRUE還是FALSE,SQL不能給出一個明確的結果,所以查詢出的結果也為NULL。
因此必須明確使用NULL值測試即 字段 IS NULL 或者其否定形式 字段 IS NOT NULL 來檢測NULL值。