MySQLでNULLを除外してレコードを表示する方法|IS NOT NULLの使い方を解説
MySQLでNULL値が含まれるレコードを除外し、値が存在するレコードだけを取得したい場合は、IS NOT NULL演算子を使用します。NULLは「値が不明・未設定」であることを表す特殊な状態のため、通常の比較演算子(= や !=)では判定できない点に注意が必要です。
この記事では、実際にテーブルを作成し、NULLを含むデータを準備したうえで、IS NOT NULLを使ったレコードの抽出方法をサンプルコード付きで解説します。
1. テーブルを作成する
まず、検証用のテーブルを作成しましょう。ここでは「FirstName」という1つのカラムを持つシンプルなテーブルを用意します。
mysql> create table DemoTable
-> (
-> FirstName varchar(100)
-> );
Query OK, 0 rows affected (3.01 sec)2. テストデータを挿入する
次に、INSERT文を使ってNULLを含む複数のレコードを挿入します。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.44 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.58 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values(NULL);
Query OK, 1 row affected (0.23 sec)3. すべてのレコードを確認する
SELECT文で全レコードを表示すると、NULLが混在していることが確認できます。
mysql> select *from DemoTable;
出力結果
+-----------+ | FirstName | +-----------+ | John | | NULL | | Chris | | NULL | | Robert | | NULL | +-----------+ 6 rows in set (0.00 sec)
合計6件のレコードのうち、3件がNULLになっています。
4. IS NOT NULLでNULLを除外する
NULLを除外してレコードを表示するには、WHERE句にIS NOT NULLを指定します。
mysql> select *from DemoTable where FirstName IS NOT NULL;
出力結果
+-----------+ | FirstName | +-----------+ | John | | Chris | | Robert | +-----------+ 3 rows in set (0.02 sec)
NULLのレコードが除外され、値が存在する3件だけが表示されました。
補足:NULLの判定には「=」が使えない理由
SQLにおいてNULLは「不明な値」を意味するため、WHERE FirstName = NULLのように比較演算子で判定しても正しく動作しません。NULLかどうかを調べる場合は必ずIS NULL、NULL以外を取得する場合はIS NOT NULLを使用してください。
なお、逆にNULLのみを抽出したい場合は、以下のようにIS NULLを使います。
mysql> select *from DemoTable where FirstName IS NULL;
まとめ
MySQLでNULLを除外してレコードを表示するには、WHERE句でIS NOT NULLを使用します。NULLは比較演算子では判定できない特殊な値であるため、IS NULL / IS NOT NULLを使い分けることが重要です。データのクレンジングや集計処理の前処理など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法
MySQLで日付をグループ化する基本 MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。 1. サンプルテーブルの作成 まず、顧客名と出荷日を格納するテーブルを作成します。 mysql> create table DemoTable2002 ( CustomerName varchar(20), CustomerShippingDate datetime ); Query OK, 0 rows affected (
-
MySQLでTRUE/FALSEのレコードを0/1として表示する方法
MySQLでTRUE/FALSEのレコードを0/1として表示する方法MySQLでは、カラムのデータ型をBOOLEANとして定義することで、TRUE/FALSEの値が自動的に0と1として表示されます。BOOLEAN型は内部的にはTINYINT(1)のエイリアスであり、TRUEは1、FALSEは0として扱われます。以下、具体的な手順を解説します。1. テーブルの作成まず、BOOLEAN型のカラムを含むテーブルを作成しましょう。mysql> create table DemoTable2035 -> (