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

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の扱いはデータベース操作の基本であり、集計やデータクレンジングの場面でも頻繁に登場します。ぜひ実際にクエリを実行して、動作を確かめてみてください。

  1. 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タイムスタンプに変換

  2. MySQLでAUTO_INCREMENT列を扱う方法を徹底解説

    MySQLでは、AUTO_INCREMENT属性を使うことで、新しい行に対して自動的に一意の番号(識別子)を割り当てることができます。本記事では、AUTO_INCREMENT列の基本的な使い方、動作の仕組み、そして利用時に守るべきルールについて、実例とともにわかりやすく解説します。基本的な使い方まずは、以下のクエリを見てみましょう。テーブルを作成し、データを挿入した結果を確認します。クエリ例CREATE TABLE tableName (    id MEDIUMINT NOT NULL AUTO_INCREMENT,