【SQL】UPDATEで複数行を同時に更新する方法

このページでは、データを更新するSQLであるUPDATE文を使って、同時に複数の行、レコードを更新する方法を紹介しております。

UPDATE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】UPDATE文の書き方:サンプル多数あり

UPDATE文の基本構文

UPDATE文の基本的な構文は次の通りです。

UPDATE テーブル名 SET 列名 = 値[,列名 = 値] [WHERE 条件];

複数の行(レコード)を同時に更新する方法

UPDATE文を使って、複数の行(レコード)を同時に更新することが出来ます。

 

1件ごとにUPDATEするSQL

サンプルでは、TAB1テーブルの主キー項目が、col1とcol2という前提で、一件ずつ主キー項目を指定してレコードを更新しています。

UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A001' AND col2 = '001';
UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A001' AND col2 = '002';
UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A001' AND col2 = '003';
UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A002' AND col2 = '001';
UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A002' AND col2 = '002';

条件ごとにまとめてUPDATEする

 例えば、先ほどのSQLからCOL2の条件を廃止して、データをまとめて更新することを考えます。

 「col1 = ‘A001’」というまとまりで更新することで、3件のデータを同時に更新することが出来ます。さらに「col1 = ‘A002’」という条件では、2件を同時に更新することが出来ます。

 先ほどは合計で5回UPDATEしていましたが、同時に更新することで、2回で済むようになります。

UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A001';
UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A002';

SQLをまとめる

 条件式をまとめることで、1本のUPDATEとしてまとめて実行することが出来ます。

 例えば、先ほどのCOL1の条件をORで並べると1本のUPDATE文にまとめることができます。1本のUPDATEで、5行を同時に更新することが出来ます。

UPDATE tab1 SET col5 = 'test' WHERE col1 = 'A001' OR col1 = 'A002';

今回の例では、ORの他にも、INでまとめる方法も使えます。

UPDATE tab1 SET col5 = 'test' WHERE col1 IN ('A001','A002');

全件をまとめて更新する

WHERE句の条件を指定しなければ、一度に全件を一括更新することが出来ます。

次のSQLでは、TAB1テーブルに存在する全てのレコードを同時に更新することが出来ます。

UPDATE tab1 SET col5 = 'test';

まとめ

UPDATE文で、複数の行(レコード)の値を更新するには、対象とする条件を集約したり、SQLをまとめる必要があります。

条件の集約やSQLをまとめることを組み合わせて、要件に合わせて効率的なSQLを構築していきましょう。

この他にもUPDATE文には様々な書き方や使い方があります。
詳しくは「【SQL】UPDATE文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。