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