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

【MySQL入門】UPDATE文とIS NULLでNULL値を含むフィールドを更新する方法

MySQLでは、IS NULL演算子とUPDATE文を組み合わせることで、NULLが格納されているフィールド(カラム)の値を効率的に更新できます。この記事では、実際のサンプルコードを使いながら、NULL値を特定して別の値に置き換える手順をわかりやすく解説します。

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

まず、動作確認用のテーブルを作成しましょう。以下のSQLを実行します。

mysql> create table OrderDemo
-> (
-> OrderId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> OrderPrice int,
-> OrderDatetime datetime
-> );
Query OK, 0 rows affected (0.66 sec)

このテーブルは、注文ID(OrderId)、注文価格(OrderPrice)、注文日時(OrderDatetime)の3つのカラムで構成されています。OrderPriceは意図的にNULLを許容している点がポイントです。

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

次に、INSERT文を使っていくつかのレコードを登録します。あえてOrderPriceにNULLを含めているのが特徴です。

mysql> insert into OrderDemo(OrderPrice,OrderDatetime) values(200,'2016-09-12');
Query OK, 1 row affected (0.24 sec)
mysql> insert into OrderDemo(OrderPrice,OrderDatetime) values(NULL,'2002-11-18');
Query OK, 1 row affected (0.26 sec)
mysql> insert into OrderDemo(OrderPrice,OrderDatetime) values(1000,'2017-12-28');
Query OK, 1 row affected (0.15 sec)

登録データの確認

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

mysql> select *from OrderDemo;

実行結果

+---------+------------+---------------------+
| OrderId | OrderPrice | OrderDatetime       |
+---------+------------+---------------------+
|       1 |        200 | 2016-09-12 00:00:00 |
|       2 |       NULL | 2002-11-18 00:00:00 |
|       3 |       1000 | 2017-12-28 00:00:00 |
+---------+------------+---------------------+
3 rows in set (0.00 sec)

OrderIdが「2」のレコードだけ、OrderPriceにNULLが入っていることが確認できます。

3. UPDATE文とIS NULLでNULL値を更新する

ここが本題です。NULL値は「=」では比較できないため、WHERE句では必ずIS NULLを使用します。以下のように記述することで、OrderPriceがNULLになっている行だけを対象に更新できます。

mysql> update OrderDemo set OrderPrice = 6500 where OrderPrice IS NULL;
Query OK, 1 row affected (0.17 sec)
Rows matched: 1 Changed: 1 Warnings: 0

「Rows matched: 1 Changed: 1」と表示されているように、条件に合致した1件のみが更新されました。

4. 更新結果を確認する

もう一度SELECT文で全レコードを取得し、更新が正しく反映されているかチェックしましょう。

mysql> select *from OrderDemo;

実行結果

+---------+------------+---------------------+
| OrderId | OrderPrice | OrderDatetime       |
+---------+------------+---------------------+
|       1 |        200 | 2016-09-12 00:00:00 |
|       2 |       6500 | 2002-11-18 00:00:00 |
|       3 |       1000 | 2017-12-28 00:00:00 |
+---------+------------+---------------------+
3 rows in set (0.00 sec)

NULLだった値が6500に置き換えられていることがわかります。他のレコードには一切影響を与えていない点も重要です。

まとめ:NULL更新のポイント

  • NULL値の検索・更新にはIS NULLを使う(= NULLは使えない)
  • 逆にNULLではない行を対象にしたい場合はIS NOT NULLを使用する
  • WHERE句で条件を絞り込まないとテーブル全体が更新されてしまうため注意が必要

NULLの扱いはSQLの基本でありながら、初心者がつまずきやすいポイントです。「=」ではなく「IS NULL」で比較するというルールさえ押さえておけば、安全にデータを更新できます。

  1. MySQLで空白(空文字列)の列をNULLに更新する方法

    データベースを運用していると、「空文字列()」として登録されてしまったデータを「NULL」に置き換えたいケースによく出会います。NULLと空文字列は似ているようで意味が異なり、検索条件や集計処理に影響を与えるため、統一しておくことが重要です。この記事では、IF()関数とUPDATE文を組み合わせて、空白値の列をNULLに更新する手順を、実際のSQLコードと実行結果付きで解説します。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成します。ここでは氏名を格納するシンプルなテーブルを用意しました。mysql> create table DemoTable1601 -&g

  2. MySQLでCOALESCE()を使ってNULLのフィールドのみを更新する方法

    はじめに MySQLでは、NULLが含まれるレコードに対して、他のカラムの値を使って特定の1つのフィールドだけを更新したいケースがあります。そんなときに便利なのが COALESCE() 関数です。 COALESCE()は、引数の中から最初にNULLではない値を返す関数です。これをUPDATE文と組み合わせることで、NULLの場合だけ別のカラムの値で置き換えることができます。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1805     (    &