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

MySQLでテーブルのNULL値のみを置き換えるクエリの書き方

MySQLでテーブル内のNULL値だけを別の値に置き換えたい場合、IS NULL プロパティを活用します。UPDATE文とIF関数を組み合わせることで、NULLが含まれる行だけを効率的に更新できます。ここでは、実際の手順をサンプル付きで解説します。

1. サンプルテーブルを作成する

まず、動作確認用のシンプルなテーブルを作成しましょう。

mysql> create table DemoTable
(
    Name varchar(100)
);
Query OK, 0 rows affected (0.53 sec)

2. テストデータを挿入する

INSERTコマンドを使って、通常の値とNULL値が混在するレコードを登録します。

mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(null);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.18 sec)

3. 現在のレコードを確認する

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

mysql> select *from DemoTable;

実行結果は以下の通りです。2つのNULL値が含まれていることがわかります。

+--------+
| Name   |
+--------+
| Robert |
| NULL   |
| David  |
| NULL   |
| Robert |
+--------+
5 rows in set (0.00 sec)

4. NULL値だけを置き換えるクエリ

次のクエリを実行すると、NULL値の行だけが指定した文字列に置き換わります。IF関数の条件に「Name IS NULL」を指定することで、NULL以外の値はそのまま維持されるのがポイントです。

mysql> update DemoTable set Name=IF(Name IS NULL,'Please Enter a Name',Name);
Query OK, 2 rows affected (0.09 sec)
Rows matched: 5 Changed: 2 Warnings: 0

実行結果を見ると、「Changed: 2」と表示されており、NULLだった2行だけが更新されたことを示しています。

5. 更新後のテーブルを確認する

もう一度SELECT文でレコードを確認しましょう。

mysql> select *from DemoTable;

NULL値が「Please Enter a Name」に置き換わり、それ以外のデータは変更されずに残っています。

+---------------------+
| Name                |
+---------------------+
| Robert              |
| Please Enter a Name |
| David               |
| Please Enter a Name |
| Robert              |
+---------------------+
5 rows in set (0.00 sec)

補足:IFNULLやCOALESCEも便利

同様の目的には、IFNULL() 関数や COALESCE() 関数も使えます。例えば「UPDATE DemoTable SET Name=IFNULL(Name, 'Please Enter a Name');」と書けば、より簡潔に同じ処理を実現できます。取得時のみNULLを別の値として表示したい場合は、UPDATEせずにSELECT文の中でこれらの関数を使う方法もおすすめです。

  1. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(

  2. MySQLでテーブルに存在しない値だけを抽出する方法(UNION ALLとNOT EXISTSの活用)

    MySQLでテーブルに存在しない値を照会するには? MySQLで「テーブルにまだ登録されていない値だけ」を取得したい場合、UNION ALLとWHERE NOT EXISTSを組み合わせるのが有効です。サブクエリで候補となる値をUNION ALLで列挙し、NOT EXISTSによって既にテーブル内に存在する値を除外することで、存在しない値のみを抽出できます。 ここでは、実際の手順をサンプルコードとともに解説します。 1. サンプルテーブルを作成する まず、自動採番(AUTO_INCREMENT)のカラムを持つテーブルを作成します。 mysql> create table DemoTab