【SQL初心者向け】MySQLで列をNULL値に更新する方法:サンプルコード付き
MySQLでNULL値を含む列を更新する方法
NULL リテラルを使用する
最も単純な方法は、NULL
リテラルを使用することです。これは、列に明示的にNULL値を挿入または更新したい場合に便利です。
UPDATE table_name
SET column_name = NULL
WHERE condition;
例:
UPDATE customers
SET email = NULL
WHERE customer_id = 123;
このクエリは、customers
テーブルの customer_id
が 123 であるレコードの email
列を NULL に更新します。
その他の値をNULLに変換する
空文字 (''
) やゼロ (0
) などの他の値を、SQLステートメント内でNULLに変換することもできます。ただし、この方法は、常に望ましい結果になるとは限りません。たとえば、空文字をNULLに変換すると、データベースによっては問題が発生する場合があります。
UPDATE table_name
SET column_name = IF(column_name = '', NULL, column_name)
WHERE condition;
UPDATE products
SET price = IF(price = 0, NULL, price)
WHERE product_id = 456;
このクエリは、products
テーブルの product_id
が 456 であるレコードの price
列を、0の場合はNULLに、それ以外の場合は元の値に更新します。
LOAD DATA
ステートメントを使用して、CSVファイルなどの外部データソースからデータをロードする場合、空の列をNULL値として処理するように指定できます。これを行うには、LOCAL
キーワードと NULL
キーワードを使用します。
LOAD DATA LOCAL INFILE 'data.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(column_name1, column_name2, ...)
SET column_name3 = NULL IF column_name3 = '';
LOAD DATA LOCAL INFILE 'customers.csv'
INTO TABLE customers
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(customer_id, name, email, phone)
SET email = NULL IF email = '';
このクエリは、customers.csv
ファイルから customers
テーブルにデータをロードします。email
列が空の場合、NULL
に変換されます。
COALESCE()
関数を使用して、NULL値を別の値に置き換えることもできます。これは、列に常に値を含めたい場合に便利です。
UPDATE table_name
SET column_name = COALESCE(column_name, default_value)
WHERE condition;
UPDATE products
SET price = COALESCE(price, 100)
WHERE product_id = 456;
注意事項
- 列に
NOT NULL
制約が設定されている場合は、NULL値を挿入または更新できません。この制約を解除するか、DEFAULT
値を指定する必要があります。 - 一部のデータベースエンジンでは、
NULL
値の更新に厳格なモードが必要になる場合があります。詳細については、データベースのマニュアルを参照してください。
UPDATE customers
SET email = NULL
WHERE customer_id = 123;
UPDATE products
SET price = IF(price = 0, NULL, price)
WHERE product_id = 456;
LOAD DATA ステートメントを使用する
LOAD DATA LOCAL INFILE 'customers.csv'
INTO TABLE customers
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(customer_id, name, email, phone)
SET email = NULL IF email = '';
COALESCE() 関数を使用する
UPDATE products
SET price = COALESCE(price, 100)
WHERE product_id = 456;
説明
- 上記のコードは、
customers
テーブルとproducts
テーブルという2つのテーブルを使用しています。 customers
テーブルには、customer_id
、name
、email
、phone
の4つの列があります。products
テーブルには、product_id
、name
、price
の3つの列があります。- 各例では、
UPDATE
ステートメントを使用して、テーブル内の特定のレコードを更新します。 WHERE
句を使用して、更新するレコードを指定します。
補足
- これらの例はほんの一例であり、状況に応じてさまざまな方法で使用できます。
- SQLの詳細については、MySQL公式ドキュメントを参照してください。
MySQLでNULL値を含む列を更新するその他の方法
CASE
式を使用して、列の値に応じてNULL値を挿入または更新できます。これは、より複雑なロジックが必要な場合に役立ちます。
UPDATE table_name
SET column_name = CASE
WHEN column_name = '' THEN NULL
WHEN column_name = 0 THEN NULL
ELSE column_name
END
WHERE condition;
UPDATE products
SET price = CASE
WHEN price = '' THEN NULL
WHEN price = 0 THEN NULL
ELSE price
END
WHERE product_id = 456;
サブクエリを使用して、NULL値を挿入または更新する値を決定することもできます。これは、他のテーブルからのデータに基づいて列を更新する必要がある場合に役立ちます。
UPDATE table_name
SET column_name = (SELECT value_column FROM other_table WHERE condition)
WHERE condition;
UPDATE customers
SET email = (SELECT email FROM users WHERE user_id = customer_id)
WHERE customer_id = 123;
ストアドプロシージャを使用して、NULL値を挿入または更新するロジックをカプセル化することもできます。これは、複雑なロジックを再利用する必要がある場合に役立ちます。
CREATE PROCEDURE update_column_with_null(table_name VARCHAR(255), column_name VARCHAR(255))
BEGIN
UPDATE table_name
SET column_name = NULL
WHERE condition;
END;
CALL update_column_with_null('customers', 'email');
このストアドプロシージャは、customers
テーブルの email
列をNULLに更新します。
mysql sql-update