MySQLでNULLの列を持つ行を抽出する方法(IS NULLの使い方)
MySQLで特定の列がNULLである行を抽出するには、WHERE句と組み合わせてIS NULLを使用します。なお、NULLは「値そのもの」ではなく「値が存在しない状態」を表すため、= NULLのような等価演算子では正しく判定できません。必ずIS NULLを使う点に注意してください。
基本構文
列がNULLである行を選択する場合の基本的な構文は以下のとおりです。
select *from yourTableName where yourColumnName IS NULL;
それでは、実際にサンプルテーブルを作成しながら動作を確認していきましょう。
サンプルテーブルの作成
まず、概念を理解するためにテーブルを作成します。
mysql> create table NULLDemo1
-> (
-> StudentId int,
-> StudentName varchar(100)
-> );
Query OK, 0 rows affected (1.48 sec)
レコードの挿入
続いて、テーブルにレコードを挿入します。StudentIdがNULLのデータも意図的に含めています。
mysql> insert into NULLDemo1 values(NULL,'John');
Query OK, 1 row affected (0.25 sec)
mysql> insert into NULLDemo1 values(100,'Johnson');
Query OK, 1 row affected (0.38 sec)
mysql> insert into NULLDemo1 values(NULL,'Carol');
Query OK, 1 row affected (0.25 sec)
mysql> insert into NULLDemo1 values(101,'Sam');
Query OK, 1 row affected (0.25 sec)
全レコードの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from NULLDemo1;
実行結果は以下のとおりです。
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| NULL | John |
| 100 | Johnson |
| NULL | Carol |
| 101 | Sam |
+-----------+-------------+
4 rows in set (0.00 sec)
このように、4件のうち2件(JohnとCarol)はStudentIdがNULLになっています。
IS NULLでNULL行のみを抽出する
それでは、冒頭で紹介した構文をこのテーブルに適用し、StudentIdがNULLである行だけを抽出してみましょう。
mysql> select *from NULLDemo1 where StudentId IS NULL;
実行結果は以下のとおりです。
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| NULL | John |
| NULL | Carol |
+-----------+-------------+
2 rows in set (0.00 sec)
期待どおり、StudentIdがNULLの2行だけが取得できました。
補足:NULL以外の行を抽出したい場合
逆に、列がNULLではない行を取得したい場合は、IS NOT NULLを使用します。
select *from NULLDemo1 where StudentId IS NOT NULL;
このように、MySQLにおけるNULLの判定はIS NULL・IS NOT NULLを使うのが基本です。データクレンジングや条件検索の際に頻繁に活用される構文なので、ぜひ覚えておきましょう。
-
MySQLでNULLを含む列の乗算を処理する方法|COALESCE関数の使い方
MySQLでNULLを含む列の乗算を正しく計算するにはMySQLでは、数値型の列にNULLが含まれている場合、そのまま乗算すると結果もNULLになってしまいます。このような問題を回避するには、COALESCE() 関数を利用するのが効果的です。COALESCE()は、引数の中から最初に見つかった非NULLの値を返す関数で、NULLを別の値(ここでは「1」)に置き換えて計算できます。以下、実際の手順を見ていきましょう。1. サンプルテーブルを作成するまず、商品点数と金額を格納するテーブルを作成します。mysql> create table DemoTable1842 &nbs
-
MySQLでWHERE IN句とNULLを組み合わせてレコードを取得する方法
MySQLでは、WHERE IN句を使った検索時にNULL値を含む行も取得したいケースがあります。しかし、NULLは通常の比較演算子では正しく評価されないため、IS NULLを組み合わせる必要があります。本記事では、その具体的な方法をサンプルコードとともに解説します。基本の構文NULLを含めて検索する場合の基本的な構文は以下のとおりです。ポイントは、IN句の条件に加えて OR カラム名 IS NULL を追加することです。SELECT yourColumnName1, yourColumnName2, yourColumnName3, ... N FROM yourTabl