MySQLでNULLとIS NOT NULLを使いこなす方法を実例付きで解説
MySQLでは、NULL値を扱うために2つの重要な演算子が用意されています。
- IS NULL:値がNULLである行を抽出する
- IS NOT NULL:値がNULLではない行を抽出する
NULLは「空の値」や「0」とは異なり、「値が存在しないこと」を表す特別な状態です。そのため、通常の比較演算子(= や !=)では判定できず、必ず IS NULL / IS NOT NULL を使う必要があります。本記事では、実際にテーブルを作成しながら、これらの演算子の基本的な使い方を解説します。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。テーブル作成のクエリは以下の通りです。
mysql> create table NULL_Demo
-> (
-> UserId int,
-> UserName varchar(20),
-> UserAddress varchar(20)
-> );
Query OK, 0 rows affected (0.67 sec)
データの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。意図的にNULLを含むデータも登録しています。
mysql> insert into NULL_Demo values(12345,'John',NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into NULL_Demo values(2345,'Carol','UK');
Query OK, 1 row affected (0.35 sec)
mysql> insert into NULL_Demo values(233444,NULL,NULL);
Query OK, 1 row affected (0.60 sec)
mysql> insert into NULL_Demo values(NULL,NULL,NULL);
Query OK, 1 row affected (0.27 sec)
SELECT文ですべてのレコードを表示して確認してみましょう。
mysql> select *from NULL_Demo;
実行結果
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 12345 | John | NULL |
| 2345 | Carol | UK |
| 233444 | NULL | NULL |
| NULL | NULL | NULL |
+--------+----------+-------------+
4 rows in set (0.00 sec)
このように、テーブルにはNULLを含むレコードが複数登録されました。ここから、IS NULL と IS NOT NULL を使った検索方法を見ていきます。
ケース1:IS NOT NULLでNULL以外のレコードを取得する
UserAddress がNULLではないレコードを抽出するクエリは以下の通りです。他の条件と組み合わせてAND演算子で接続することもできます。
mysql> select *from NULL_Demo where UserId = 2345 AND UserName = 'Carol' AND UserAddress IS NOT NULL;
上記の条件に一致する、NULLではないレコードのみが出力されます。
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 2345 | Carol | UK |
+--------+----------+-------------+
1 row in set (0.00 sec)
ケース2:IS NULLでNULLのレコードを取得する
逆に、UserAddress がNULLであるレコードを抽出したい場合は、IS NULLを使用します。
mysql> select *from NULL_Demo where UserName = 'John' AND UserAddress IS NULL;
条件に合致した、UserAddress がNULLのレコードだけが出力されます。
+--------+----------+-------------+
| UserId | UserName | UserAddress |
+--------+----------+-------------+
| 12345 | John | NULL |
+--------+----------+-------------+
1 row in set (0.00 sec)
まとめ
MySQLでNULLを判定する際には、以下のポイントを押さえておきましょう。
- NULLの判定には「= NULL」ではなくIS NULLを使う
- NULL以外を判定するにはIS NOT NULLを使う
- 他のWHERE条件と組み合わせて、柔軟にデータを絞り込める
NULLの扱いはデータベース操作の基本であり、集計やデータクレンジングの場面でも頻繁に登場します。ぜひ実際にクエリを実行して、動作を確かめてみてください。
-
PHPとMySQLで時刻を扱う方法|strtotime()とDATE_FORMAT()による形式変換
PHPで時刻形式を変換する方法 PHPで時刻データを扱う際、strtotime()関数を使えば、「8:55 PM」のような人間が読みやすい12時間制の表記を、データベースで扱いやすい24時間制(HH:MM:SS)へ簡単に変換できます。 PHPコード例 $timeValue = 8:55 PM; $changeTimeFormat = date(H:i:s, strtotime($timeValue)); echo(24時間制への変換結果=); echo($changeTimeFormat); このコードでは、まずstrtotime()が文字列「8:55 PM」をUNIXタイムスタンプに変換
-
MySQLでAUTO_INCREMENT列を扱う方法を徹底解説
MySQLでは、AUTO_INCREMENT属性を使うことで、新しい行に対して自動的に一意の番号(識別子)を割り当てることができます。本記事では、AUTO_INCREMENT列の基本的な使い方、動作の仕組み、そして利用時に守るべきルールについて、実例とともにわかりやすく解説します。基本的な使い方まずは、以下のクエリを見てみましょう。テーブルを作成し、データを挿入した結果を確認します。クエリ例CREATE TABLE tableName ( id MEDIUMINT NOT NULL AUTO_INCREMENT,