【SQL】3値論理とNULL(NULLにいじめられないために)
達人に学ぶSQL徹底指南所の学習記録です。
データベースにnullが一つでも含まれれば、クエリから正しくない結果が返される可能性がある。
とりあえずこれは覚える!
3つの真理値の間には、下記の優先順位がある。
強い方が弱い方を飲み込む。
- 例1:「true AND unknown」なら、unknownの方が強いので、結果はunknown。
- 例2:「true OR unknow」なら、trueの方が強いので、結果はtrue。
- 特に、AND演算にunknownが含まれたら、結果が絶対にtrueにならない。
ポイント
- NULLは値ではない
- 値ではないので、述語もまともに適用できない
- 無理やり適用するとunknownが生じる
- unknownが論理演算に紛れ込むと、SQLが直観に反する動作をする
- これに対処するには、段階的なステップに分けてSQLの動作を追うことが有効
対応方法
- CASE式等を使ってNULLを何からの値に変換するか
- テーブルにNOT NULL制約をつけて極力NULLを排除する