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

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を使い分けることが重要です。データのクレンジングや集計処理の前処理など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLのGROUP BY句で日付をグループ化してレコードを表示する方法

    MySQLで日付をグループ化する基本 MySQLで日付データをグループ化してレコードを表示するには、GROUP BY句を使用します。この記事では、顧客ごとに出荷日の最小値と最大値を取得する例を通じて、GROUP BY句の使い方を詳しく解説します。 1. サンプルテーブルの作成 まず、顧客名と出荷日を格納するテーブルを作成します。 mysql> create table DemoTable2002 ( CustomerName varchar(20), CustomerShippingDate datetime ); Query OK, 0 rows affected (

  2. 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     -> (