!=會過濾值為null的數據
在測試數據時忽然發現,使用如下的SQL是無法查詢到對應column為null的數據的:
select * from test where name != 'Lewis';
本意是想把表里name的值不為Lewis
的所有數據都搜索出來,結果發現這樣寫無法把name的值為null的數據也包括進來。
上面的!=
換成<>
也是一樣的結果,這可能是因為在數據庫里null是一個特殊值,有自己的判斷標准,如果想要把null的數據也一起搜索出來,需要額外加上條件,如下:
select * from test where name != 'Lewis' or name is null;
雖然這只是個小知識點,不過還是值得記錄注意下,以免日后在開發中犯小錯誤。
null值的比較
這里另外說下SQL里null值的比較,任何與null值的比較結果,最后都會變成null,以PostgreSQL
為例,如下:
select null != null;
select null = null;
select null > 1;
select null <> 1;
以上結果都是null,而不是什么true或者false。另外有些函數是不支持null值作為輸入參數的,比如count()
或者sum()
等。