NULLには特別な動作があります。NULLと何かを比較すると、NULL
が返されます。 、これはfalse
以外のものです または0
。 「不明」という意味です。
たとえば、次の表を見てください:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M'
期待どおりに1行を返します
SELECT * FROM mytable WHERE gender != 'M'
3行ではなく、2行を返します。
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
予想される3行を返します。
編集:一部のアプリケーションでは、0
を使用します (または、神は禁じています、別の「魔法の数」)NULL
の代わりに 推奨されていません(この例では、単位や正確な値は関係ありません):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
ここでは、NULL
1月6日は「値が不明」を意味します。おそらく、温度が低すぎて温度計のプローブが応答しなくなったためです。ただし、気温が0
だった1月3日とはまったく異なる意味です。 、つまり0度です。
また、@ Bill Karwinが言及しているように、NULLは集計関数(COUNT
)で特別に動作します。 、SUM
、AVG
など):AVG(Temperature)
を計算します 上記のデータで-14.5
が得られます 、NULL行は無視されるため。