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

MySQLでNULL値のデータを抽出するSELECTクエリの使い方

MySQLでNULL値が格納されたレコードを取得するには、WHERE句で「IS NULL」を使用します。NULLは通常の値とは異なる特殊な状態を表すため、「= NULL」という等号による比較は正しく動作しない点に注意が必要です。

サンプルテーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable
(
    CustomerName varchar(100),
    CustomerCountryName varchar(100)
);
Query OK, 0 rows affected (0.95 sec)

テストデータの挿入

INSERTコマンドを使ってレコードを挿入します。ここでは、意図的にNULLを含むデータも登録しています。

mysql> insert into DemoTable values('Chris','US');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Bob','UK');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Carol',NULL);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('David','AUS');
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Mike',NULL);
Query OK, 1 row affected (0.18 sec)

登録済みレコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。CarolとMikeのCustomerCountryNameにはNULLが格納されていることがわかります。

+--------------+---------------------+
| CustomerName | CustomerCountryName |
+--------------+---------------------+
| Chris        | US                  |
| Bob          | UK                  |
| Carol        | NULL                |
| David        | AUS                 |
| Mike         | NULL                |
+--------------+---------------------+
5 rows in set (0.00 sec)

NULL値のレコードを取得するクエリ

NULL値を持つデータだけを抽出するには、次のようにIS NULLを指定したSELECT文を実行します。

mysql> select *from DemoTable where CustomerCountryName IS NULL;

実行結果は以下のとおりです。CustomerCountryNameがNULLのレコードのみが正しく取得できました。

+--------------+---------------------+
| CustomerName | CustomerCountryName |
+--------------+---------------------+
| Carol        | NULL                |
| Mike         | NULL                |
+--------------+---------------------+
2 rows in set (0.00 sec)

ポイント:「= NULL」ではなく「IS NULL」を使う

NULLは「値が存在しない(不明である)」ことを表す特別な状態です。そのため、「WHERE CustomerCountryName = NULL」のように等号で比較しても、該当するレコードは1件も返されません。NULLを判定する場合は必ずIS NULLを、逆にNULL以外のレコードを取得したい場合はIS NOT NULLを使用しましょう。

  1. MySQLで複数の列のNULL値を空文字列に置き換えてデータを取得するクエリの書き方

    MySQLでデータを取得する際、複数の列に含まれるNULL値を空文字列に置き換えて表示したいケースはよくあります。これには、IFNULL()またはCOALESCE()関数を使用します。IFNULL()とCOALESCE()の違いIFNULL(列名, 置換値)は、指定した列がNULLの場合に第2引数の値を返す関数です。COALESCE(値1, 値2, ...)は、引数の中で最初にNULLではない値を返す関数で、より汎用的に利用できます。どちらを使っても同じ結果が得られます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTa

  2. MySQLで最大の累積値とその出現回数を取得するクエリの書き方

    カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い