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 NULLとIS 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を使用する
この基本を理解しておけば、データの整合性チェックやクリーンアップ処理など、実務でのクエリ作成がぐっとスムーズになります。
-
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
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (