SQLで複数レコードを条件付きで更新する方法
SQLで複数の列を更新する
SQLの UPDATE
文を使って、テーブル内の複数の列を更新する方法について解説します。
基本構文
UPDATE テーブル名
SET 列名1 = 新しい値1, 列名2 = 新しい値2, ...
WHERE 条件;
例
customers
テーブルの name
列と email
列を更新する例です。
UPDATE customers
SET name = '山田 太郎', email = '[email protected]'
WHERE id = 1;
この例では、id
が 1 のレコードの name
列が "山田 太郎" に、email
列が "[email protected]" に更新されます。
複数の条件
WHERE
句で複数の条件を指定することができます。
UPDATE customers
SET name = '山田 太郎', email = '[email protected]'
WHERE id > 10 AND country = '日本';
この例では、id
が 10 より大きく、country
列が "日本" のレコードの name
列と email
列が更新されます。
列値の計算
新しい値を計算式で指定することができます。
UPDATE customers
SET price = price * 1.1
WHERE country = '日本';
この例では、country
列が "日本" のレコードの price
列が 10% 値上げされます。
副問合せ
別のテーブルから値を取得して更新することができます。
UPDATE customers
SET manager_id = (
SELECT id
FROM managers
WHERE name = '田中 花子'
);
この例では、customers
テーブルの manager_id
列が、managers
テーブルの name
列が "田中 花子" のレコードの id
に更新されます。
注意点
- 更新する列と値の数が一致していることを確認してください。
WHERE
句で条件を指定しないと、すべてのレコードが更新されます。- 更新前にバックアップを取ることをおすすめします。
UPDATE
文を使って、NULL 値を更新することができます。
関連キーワード
- SQL
- SQL Server
- SQL update
- UPDATE
- SET
- WHERE
UPDATE customers
SET name = '山田 太郎', email = '[email protected]'
WHERE id = 1;
複数の条件で更新する
UPDATE customers
SET name = '山田 太郎', email = '[email protected]'
WHERE id > 10 AND country = '日本';
列値を計算して更新する
UPDATE customers
SET price = price * 1.1
WHERE country = '日本';
副問合せを使って更新する
UPDATE customers
SET manager_id = (
SELECT id
FROM managers
WHERE name = '田中 花子'
);
NULL 値を更新する
UPDATE customers
SET email = NULL
WHERE id = 1;
列の値を別の列の値にコピーする
UPDATE customers
SET address = shipping_address
WHERE id = 1;
全レコードを更新する
UPDATE customers
SET name = '山田 太郎', email = '[email protected]';
特定の列のみを更新する
UPDATE customers
SET name = '山田 太郎'
WHERE id = 1;
UPDATE 文と他の SQL 文を組み合わせる
SELECT * FROM customers
WHERE id = 1;
UPDATE customers
SET name = '山田 太郎'
WHERE id = 1;
SELECT * FROM customers
WHERE id = 1;
UPDATE 文のトランザクション処理
BEGIN;
UPDATE customers
SET name = '山田 太郎'
WHERE id = 1;
-- エラーが発生した場合
ROLLBACK;
-- エラーが発生しなかった場合
COMMIT;
SQLで複数の列を更新するその他の方法
UPDATE customers
SET name =
CASE
WHEN country = '日本' THEN '山田 太郎'
ELSE '田中 花子'
END,
email =
CASE
WHEN country = '日本' THEN '[email protected]'
ELSE '[email protected]'
END
WHERE id = 1;
VALUES() 関数を使う
UPDATE customers
SET (name, email) = (VALUES('山田 太郎', '[email protected]'))
WHERE id = 1;
UPDATE 文を複数回実行する
UPDATE customers
SET name = '山田 太郎'
WHERE id = 1;
UPDATE customers
SET email = '[email protected]'
WHERE id = 1;
ストアドプロシージャを使う
CREATE PROCEDURE update_customer
(
@id INT,
@name VARCHAR(50),
@email VARCHAR(50)
)
AS
BEGIN
UPDATE customers
SET name = @name,
email = @email
WHERE id = @id;
END;
EXEC update_customer 1, '山田 太郎', '[email protected]';
バッチ処理を使う
-- バッチファイル
UPDATE customers
SET name = '山田 太郎', email = '[email protected]'
WHERE id = 1;
UPDATE customers
SET name = '田中 花子', email = '[email protected]'
WHERE id = 2;
-- コマンド
sqlcmd -S localhost -d test -i batch.sql
- どの方法を選択する場合でも、パフォーマンスとセキュリティを考慮する必要があります。
sql sql-server sql-update