1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLでNULLを使うときの注意点まとめ

Last updated at Posted at 2021-03-30

1. NULLは値ではない。

NULLは未知または適用不能を意味する。値ではなく、そこに値が存在しないことを示す記号である。

2. 述語をまともに適用できず、適用するとunknownが生じ、SQLが直感に反する動作をする。

NULLに比較述語を適用した結果、常にunknownとなる。
単純な例として、

SELECT * FROM tbl WHERE col = NULL;

これは、NULLの行を選択することはできない。
何故ならば、col = NULLとするとこの評価値はunknownとなる。クエリの結果として選択されるのは評価値がtrueの行のみである。

以下が正しい。

SELECT * FROM tbl WHERE col IS NULL;

3. 第3の真理値unknown

SQLの世界には第3の真理値であるunknownが存在する。
true,false,unknownの間に次のような優先順位があると考えるとわかりやすい。

  • ANDの場合: false > unknown > true
  • ORの場合: true > unknown > false

問題を引き起こすSQLの例

排中律が成立しない

SELECT * FROM students WHERE age = 20 OR age <> 20;

このSQLはageがNULLのレコードを選択しない。

CASE式

CASE col_1
  WHEN 1    THEN 'o'
  WHEN NULL THEN 'x'
END

この式は絶対にxを返さない。2つ目のWHEN句がcol_1 = NULLの省略形であるため。

対策

テーブルにNOT NULL成約をつけて極力NULLを排除し、以下の指針を検討する。

  • コード値の場合、未コード化用コードを割り振る
  • 名前の場合、「名無し」を割り振る
  • 数値の場合、0で代替する
  • 日付の場合、最大値、最小値で代替する
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?