NULL 値というものを SQL
        初心者はよく混乱します。SQL
        初心者は、多くの場合、NULL
        が空文字 ""
        と同じであると考えてしまいます。これは違います。たとえば、以下のステートメントは完全に別のものです。
      
mysql>INSERT INTO my_table (phone) VALUES (NULL);mysql>INSERT INTO my_table (phone) VALUES ("");
        どちらのステートメントも、値を
        phone
        カラムに挿入しています。しかし、最初のステートメントは
        NULL 値を挿入し、2
        つ目は空文字を挿入しています。最初のステートメントは
        ``電話番号が不明''
        であると考えることができ、2番目は``電話を持っていない''
        と考えることができます。
      
        SQL では、NULL
        値は、他の値と比較すると(NULLでも)常に偽になります。NULL
        を含む式は、演算子と式に含まれている関数のドキュメントに特に断りがなければ、常に
        NULL
        値を生成します。以下の例では、全カラムが
        NULL を返します。
      
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
        NULL
        のカラム値を検索したい場合、=NULL
        テストは使用できません。どんな式でも
        expr = NULL
        は偽なので、以下のステートメントはレコードを返しません。
      
mysql> SELECT * FROM my_table WHERE phone = NULL;
        NULL 値を検出するには、IS
        NULL テストを使用します。
        以下から、NULL
        の電話番号と空の電話番号の検索方法がわかります。
      
mysql>SELECT * FROM my_table WHERE phone IS NULL;mysql>SELECT * FROM my_table WHERE phone = "";
        MySQL バージョン 3.23.2 以降を使用し、かつ
        MyISAM、InnoDB、BDB
        テーブル型を使用している場合に限り、NULL
        値を持つことができるカラムのインデックスを追加することができます。
        以前のバージョンや別のテーブル型では、NOT
        NULL
        などのカラムを宣言する必要があります。これは、NULL
        をインデックス化されたカラムに挿入できないということでもあります。
      
        LOAD DATA INFILE
        でデータを読み取ると、空のカラムは
        '' で更新されます。カラムに
        NULL
        値が必要な場合は、テキストファイルで
        \N
        を使用してください。状況によっては、リテラル文字
        'NULL' も使用されます。 See
        項6.4.8. 「LOAD DATA INFILE 構文」。
      
        ORDER BY
        を使用する際、降順でソートするように
        DESC
        を指定すると、NULL
        値が最初または最後に表示されます。例外: MySQL
        バージョン 4.0.2 から 4.0.10
        では、ソート順序に関わらず NULL
        値は 1 番目にソートされます。
      
        GROUP BY を使用すると、すべての
        NULL 値が同じと見なされます。
      
        COUNT()、MIN()、SUM()
        などの集約(要約)関数では、NULL
        値は無視されます。例外は COUNT(*)
        です。この関数は、個々のカラム値ではなくレコードをカウントします。
        たとえば、以下のステートメントでは
        2つのカウントが行われます。
        最初は、テーブルにあるレコード数のカウントです。2
        番目は age カラムにある非
        NULL 値のカウントです。
      
mysql> SELECT COUNT(*), COUNT(age) FROM person;
        NULL 処理を補うために、IS
        NULL と IS NOT NULL 演算子と
        IFNULL()
        関数を使用することができます。
      
        カラム型の中には、NULL
        値が特別に扱われるものがあります。テーブルの最初のカラム
        TIMESTAMP に NULL
        を挿入すると、現在の日付と時刻が挿入されます。AUTO_INCREMENT
        カラムに NULL
        を挿入すると、順番の次の番号が挿入されます。
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

