私はプログラミング言語におけるNULLは、「何もない値」または「何も示していない値」という定義で理解しています。ところがSQLにおけるNULLでは、この単純な理解が通用しないことを知りました。先に結論を言ってしまうと、「NULLとは不明な値のことである」という解釈で落ち着いたのですが。これの何が問題なのか、解説します。MySQLにおけるNULLとは、「存在しない不明な値」のことであるMySQLのリファレンスを読むと、NULLとは不明な値であることがわかります。NULL値に慣れるまでは驚くかもしれません。概念的には、NULLは「存在しない不明な値」を意味し、ほかの値とは多少異なる方法で扱われます。不明な値を直訳で解釈すると、「何が入っているのか分からない値」という意味になります。NULLを算術(計算)で使うとNULLになる一般的なプログラミング言語では、NULLを使った計算では警告や例外が発生するか、もしくは「0」という値に自動変換されて計算されます。10ところがMySQLでは「10」にもならないし、エラーにもなりません。NULL」はNULLになります。row)NULLは算術比較できないMySQLのリファレンスを読み進めていくと、算術比較はできませんと書いてあります。テストすることはできません。NULLは不明な値なので、算術比較の結果もまた、不明になってしまうのだろうと私は解釈しました。NULL」制約のないカラムをSQLでそのまま計算に使わないほうが良いと言えます。計算に使えない数値というのも困りますので、対処法を考えてみます。私が思いつく限り、対処法は大きく分けて2つあります。0」にして、必ず数値がある状態にします。値が「0」であれば算術に使うことができるため、想定外の計算トラブルは抑制できます。IFNULL()などのSQL関数を使って、NULL値を回避するMySQLにはIFNULL()という、SQL関数があります。IFNULLとは、「もしNULLであれば」を判定する関数です。これを使って、NULLであれば「0」に変換して計算します。NULL」制約を使えないのであれば、NULL判定をしてデフォルト値を与えましょう。NULLを回避することによって、計算結果がNULLになってしまう問題を防げます。さいごにMySQLやPostgreSQLにおけるNULLとは、特異な値であることを学びました。MySQLのリファレンスにも、「NULL値に慣れるまでは驚くかもしれません。」と、あえて書いてあるのだと推測します。データベースにおけるNULLの扱い多くのRDBMSで共通ですが、Oracleだけは特別みたいです。共通ですが、重要な例外が1つあります。