MySQLでNULLとNOT NULLのレコードを表示する方法|特定の1つの値を除外する
NULL・NOT NULLレコードの表示と特定値の除外について
MySQLでNULLのレコードを表示するには「IS NULL」を使用します。また、特定の1つの値を除外したい場合は「!=」演算子を利用します。なお、「!=」は「<>」演算子の別名(エイリアス)であり、どちらを使っても同じ動作になります。
本記事では、NULLとNOT NULLのレコードを表示しながら、特定の値を持つレコードだけを除外するクエリの書き方を、実際のコード例をもとに解説します。
サンプルテーブルの作成
まず、以下のSQLを実行してテーブルを作成しましょう。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
PlayerName varchar(40)
);
Query OK, 0 rows affected (0.50 sec)テストデータの挿入
続いて、insertコマンドを使ってテーブルに複数のレコードを挿入します。意図的にNULL値を含むデータも登録しておきます。
mysql> insert into DemoTable(PlayerName) values('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(PlayerName) values(NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(PlayerName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(PlayerName) values('Mike');
Query OK, 1 row affected (0.08 sec)テーブル内の全レコードを確認する
select文を実行して、テーブル内のすべてのレコードを確認してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+----+------------+ | Id | PlayerName | +----+------------+ | 1 | Adam | | 2 | NULL | | 3 | Sam | | 4 | Mike | +----+------------+ 4 rows in set (0.00 sec)
特定の値を除外してNULL・NOT NULLレコードを表示する
ここからが本題です。以下のクエリでは、「Sam」という値を持つレコードを除外しつつ、NULLおよびNOT NULLのレコードをすべて表示しています。
mysql> select *from DemoTable
where PlayerName!='Sam'
or PlayerName IS NULL;実行結果は以下の通りです。
+----+------------+ | Id | PlayerName | +----+------------+ | 1 | Adam | | 2 | NULL | | 4 | Mike | +----+------------+ 3 rows in set (0.00 sec)
なぜ「or PlayerName IS NULL」が必要なのか
SQLにおいて、NULLに対する比較演算(例:「NULL != 'Sam'」)はTRUEにもFALSEにもならず、UNKNOWNとして評価されます。そのため、「WHERE PlayerName != 'Sam'」という条件だけでは、NULLのレコードは結果から除外されてしまいます。
そこで、「or PlayerName IS NULL」を条件に加えることで、NULLのレコードも確実に結果セットへ含めることができます。NULLを扱う際にはよくある落とし穴なので、覚えておくと便利です。
まとめ
- NULLのレコードを表示するには「IS NULL」を使用する
- 特定の値を除外するには「!=」または「<>」演算子を使用する
- NULLは通常の比較演算子では判定できないため、「or カラム名 IS NULL」を組み合わせるのがポイント
-
MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法
MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 ro
-
MySQLでNOT NULLの値に対して1を設定する方法(IF関数とIS NOT NULLの使い方)
MySQLでNOT NULLの値に1を設定するにはMySQLでは、IS NOT NULL演算子とIF()関数を組み合わせることで、値がNULLでない場合に「1」、NULLの場合に「0」を返すことができます。データの存在チェックやフラグ管理など、さまざまな場面で活用できる便利なテクニックです。基本構文NOT NULLかどうかを判定して1を設定する基本構文は以下のとおりです。select if( is not NULL,1,0) as anyAliasName;実際に動作するクエリを見てみましょう。mysql> select if( is not NULL,1,0);このクエリを実行すると、