MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで条件付きNOT NULLを扱う方法:IS NULLとIS NOT NULLの正しい使い方

MySQLでNULLを条件として扱う場合、<>(不等号)や=(等号)といった比較演算子は使用できません。NULLはMySQLにおいて特別な扱いを受ける値であり、判定には必ずIS NULLおよびIS NOT NULLを使用する必要があります。

なぜ比較演算子ではNULLを判定できないのか

NULLは「値が存在しない(不明である)」ことを表す特殊な状態です。そのため、SendMessage = NULLのような比較は、結果がTRUEにもFALSEにもならず、常にUNKNOWNと評価されます。これが、NULLの判定には専用の構文が必要となる理由です。

実際に動作を確認するため、まずテーブルを作成しましょう。テーブル作成のクエリは以下の通りです。

mysql> create table ConditionalNotNullDemo
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> SendMessage longtext,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.62 sec)

テストデータの挿入

次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。NULL値と通常の文字列を混在させて登録します。クエリは以下の通りです。

mysql> insert into ConditionalNotNullDemo(SendMessage) values(NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into ConditionalNotNullDemo(SendMessage) values('Hi');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ConditionalNotNullDemo(SendMessage) values('Hello');
Query OK, 1 row affected (0.20 sec)
mysql> insert into ConditionalNotNullDemo(SendMessage) values(NULL);
Query OK, 1 row affected (0.18 sec)

SELECT文ですべてのレコードを表示して確認してみましょう。

mysql> select *from ConditionalNotNullDemo;

実行結果は以下のようになります。

+----+-------------+
| Id | SendMessage |
+----+-------------+
|  1 | NULL        |
|  2 | Hi          |
|  3 | Hello       |
|  4 | NULL        |
+----+-------------+
4 rows in set (0.00 sec)

それでは、IS NULLIS NOT NULLの実際の使い方を、2つのケースに分けて見ていきましょう。

ケース1:IS NULLでNULLのレコードだけを抽出する

NULLのメッセージだけを絞り込みたい場合は、IS NULLを使用します。クエリは以下の通りです。

mysql> select *from ConditionalNotNullDemo where SendMessage IS NULL;

実行結果:

+----+-------------+
| Id | SendMessage |
+----+-------------+
|  1 | NULL        |
|  4 | NULL        |
+----+-------------+
2 rows in set (0.00 sec)

IDが1と4の、NULLが格納されているレコードのみが取得できていることがわかります。

ケース2:IS NOT NULLでNULL以外の有効なレコードを抽出する

逆に、NULL以外の有効なメッセージだけを表示したい場合は、IS NOT NULLを使用します。クエリは以下の通りです。

mysql> select *from ConditionalNotNullDemo where SendMessage IS NOT NULL;

実行結果:

+----+-------------+
| Id | SendMessage |
+----+-------------+
|  2 | Hi          |
|  3 | Hello       |
+----+-------------+
2 rows in set (0.03 sec)

まとめ

MySQLでNULLを条件に含める際は、以下のポイントを押さえておきましょう。

  • NULLの判定に=<>は使えない(結果が常にUNKNOWNになる)
  • NULLを抽出したい場合はIS NULLを使用する
  • NULL以外を抽出したい場合はIS NOT NULLを使用する

この基本を理解しておけば、データの整合性チェックやクリーンアップ処理など、実務でのクエリ作成がぐっとスムーズになります。

  1. MySQLの既存のカラムにNOT NULL制約を設定する方法

    MySQLですでに存在するカラムにNOT NULL制約を追加するには、ALTER TABLE文を使用します。この記事では、実際のSQL例を使いながら、NOT NULL制約の設定方法とその動作確認の手順をわかりやすく解説します。 1. テーブルの作成 まず、検証用のサンプルテーブルを作成します。 mysql> create table DemoTable1949 ( UserId int, UserName varchar(20) ); Query OK, 0 rows affected (0.00 sec) この時点では、UserNameカラムにはNUL

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (