SQLで複数レコードを条件付きで更新する方法

2024-04-11

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


単体テストフレームワークでレベルアップ:SQL Server ストアドプロシージャのテスト

テスト方法はいくつかありますが、代表的なものは以下の4つです。手動テストメリット:特別なツールが不要動作の流れを直感的に理解できるテストケースの作成・実行に時間がかかるテストケースが網羅的にならない可能性があるT-SQL ステートメント手軽に実行できる...


CASE式とIS NULL/IS NOT NULL演算子を使ったグループ化

CASE式を使用して、NULLとNOT NULLの値を別々のグループに分割できます。次の例では、column1 カラムに基づいてレコードをグループ化しています。このクエリは、次の結果を返します。このクエリは、上記のCASE式を使用する例と同じ結果を返します。...


Azure Data Lake Storageを使ってSQL ServerからCSV形式でデータをエクスポートする方法

必要条件:SQL Server インスタンスsqlcmd コマンドラインツール (SQL Server Management Studio に含まれています)手順:コマンドプロンプトを開くコマンドプロンプトを開くsqlcmd コマンドを実行 以下のコマンドを実行します。...


SQL検索をレベルアップ!ANDとORの優先順位で思い通りの結果を抽出

そこで重要となるのが、演算子の優先順位です。SQLでは、以下の優先順位で論理演算子が評価されます。NOTANDORつまり、括弧がない式では、NOT、AND、OR の順に評価されます。例:上記の例では、括弧がないため、以下の順序で評価されます。...


サードパーティ製ツールを使用してリモート SQL Server データベースをローカルドライブにバックアップする方法

方法 1:SQL Server Management Studio (SSMS) を使用するSSMS を開き、リモート SQL Server インスタンスに接続します。オブジェクト エクスプローラーで、バックアップしたいデータベースを展開します。...


SQL SQL SQL SQL Amazon で見る



SQL Server 2008 以降で使える MERGE ステートメント

SQL 結合を使用して、複数のテーブルからデータを抽出して更新するクエリを作成できます。これは、関連するデータが複数のテーブルに分散している場合に便利です。基本構文例顧客テーブルと注文テーブルを結合して、注文ステータスを更新するこのクエリは、以下の処理を実行します。