SQL語句中NULL的真實含義

iSQlServer發表於2009-02-02

NULL,表示不明確、未知的列值

 

測試表:testnull(id varchar(32))

資料庫:Sybase ASA11.0

行資料(''), (NULL)

 

資料庫選項ansinull為true(也是ASA資料庫的預設選項)時,

select * from testnull where id = null

select * from testnull where id != null

結果均為空

select * from testnull where id is null

結果為(NULL)

select * from testnull where id is not null

結果為('')

 

當ansinull為false時,

select * from testnull where id = null

結果為(NULL)

select * from testnull where id != null

結果為('')

 

從上述結果來看,NULL值確實是一個有爭議的東西,但是,毫無疑問,ansinull對NULL的定義是精確的,即不能對NULL值進行等於或不等判斷,無論是等還是不等,其結果都為false.

而統一的is null, is not null的含義則顯然是明確的,NULL is null恆為真,非NULL is null恆為假。

 

再看看在Oracle中的結果:

SQL> select * from testnull where id is null;

ID
--------------------------------

 

SQL> select * from testnull where id is not null;

no rows selected

SQL> select * from testnull where id=null;

no rows selected

SQL> select * from testnull where id != null;

no rows selected

空字串''在oracle中被示為NULL值了。比較怪異。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-545036/,如需轉載,請註明出處,否則將追究法律責任。

相關文章