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

MySQLで複数のカラムにNULL値を含むレコードを検索する方法

はじめに

MySQLで複数のカラムの中にNULL値が1つでも含まれているレコードを抽出したい場合、GREATEST()関数を活用するのが効果的です。GREATEST()は引数の中から最大値を返す関数ですが、引数のいずれかにNULLが含まれている場合、結果もNULLを返すという特性があります。この特性を利用すれば、複数カラムにわたるNULL値のチェックをシンプルな条件式で実現できます。

この記事では、実際にテーブルを作成し、サンプルデータを挿入して、NULL値を含むレコードを検索する手順を順番に解説します。

テーブルの作成

まず、4つのINT型カラムを持つテーブルを作成しましょう。

mysql> create table DemoTable1862
    (
    Value1 int,
    Value2 int,
    Value3 int,
    Value4 int
    );
Query OK, 0 rows affected (0.00 sec)

サンプルデータの挿入

次に、INSERTコマンドを使ってレコードを登録します。ここでは、NULL値を含むレコードと含まないレコードを混在させて挿入します。

mysql> insert into DemoTable1862 values(43,34,56,42);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1862 values(NULL,78,65,NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1862 values(110,NULL,78,NULL);
Query OK, 1 row affected (0.00 sec)

登録データの確認

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

mysql> select * from DemoTable1862;

実行すると、以下のような結果が出力されます。

+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
|     43 |     34 |     56 |     42 |
|   NULL |     78 |     65 |   NULL |
|    110 |   NULL |     78 |   NULL |
+--------+--------+--------+--------+
3 rows in set (0.00 sec)

NULL値を含むレコードを検索するクエリ

それでは、複数のカラムの中にNULL値が存在するレコードを抽出するクエリを見てみましょう。WHERE句でGREATEST()関数の結果がIS NULLであるかどうかを判定します。

mysql> select * from DemoTable1862 where greatest(Value1,Value2,Value3,Value4) IS NULL;

実行すると、以下のような結果が出力されます。

+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
|   NULL |     78 |     65 |   NULL |
|    110 |   NULL |     78 |   NULL |
+--------+--------+--------+--------+
2 rows in set (0.00 sec)

仕組みの解説

GREATEST()関数は、指定した引数の中から最大の値を返しますが、引数のうち1つでもNULLが含まれていると、評価結果としてNULLを返します。そのため、「greatest(...) IS NULL」という条件は、「4つのカラムのうち少なくとも1つにNULLが含まれている」ことを意味します。

出力結果を見ると、すべてのカラムに値が入っている最初のレコード(43, 34, 56, 42)は除外され、NULLを含む2件のレコードだけが正しく抽出されていることがわかります。

まとめ

MySQLで複数カラムにNULL値を含むレコードを検索するには、GREATEST()関数とIS NULLを組み合わせる方法が便利です。「Value1 IS NULL OR Value2 IS NULL ...」のようにOR条件を繰り返し書く必要がなく、カラム数が多くても簡潔に記述できるのが大きなメリットです。なお、LEAST()関数も同様にNULLを伝播するため、同じ考え方で最小値ベースのチェックにも応用できます。

  1. MySQLでNOT NULLの値に対して1を設定する方法(IF関数とIS NOT NULLの使い方)

    MySQLでNOT NULLの値に1を設定するにはMySQLでは、IS NOT NULL演算子とIF()関数を組み合わせることで、値がNULLでない場合に「1」、NULLの場合に「0」を返すことができます。データの存在チェックやフラグ管理など、さまざまな場面で活用できる便利なテクニックです。基本構文NOT NULLかどうかを判定して1を設定する基本構文は以下のとおりです。select if( is not NULL,1,0) as anyAliasName;実際に動作するクエリを見てみましょう。mysql> select if( is not NULL,1,0);このクエリを実行すると、

  2. MySQLで特定の値を検索してNULLに置き換える方法をわかりやすく解説

    MySQLで値を検索してNULLに置き換える基本構文 MySQLでテーブル内の特定の値を見つけてNULLに置き換えたい場合は、UPDATE文とSET句を使って yourColumnName = NULL のように指定します。基本的な構文は以下の通りです。 update yourTableName set yourColumnName=NULL where yourColumnName=yourValue; WHERE句で対象となる値を指定することで、該当する行だけをNULLに更新できるのがポイントです。 サンプルテーブルの作成 まずは動作確認用のテーブルを作成しましょう。 mysql>