【SQL】UPDATE文の書き方:サンプル多数あり


このページでは、ORACLEデータベースで、表に存在するデータを更新・変更するSQL、UPDATE文について紹介します。

UPDATE文の基本構文に加えて、たくさんのサンプルを掲載していますのでぜひ参考にしてください。

SQLとは何か?どんな種類があるか基礎的な内容については↓で詳しく解説していますので参考にしてください。
>>【初心者向け】SQLとは?基礎から分かりやすく解説

UPDATE文の基本構文

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

WHERE句の条件は任意でつけることが出来ます。
条件を指定することで、更新対象の行データを選択できます。全く条件を指定しない場合は、表の全てのデータを一括更新します。

更新する列については、一度に複数の列を更新することも出来ます。

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

複数の列を同時に更新する方法

UPDATE文で一度に複数列を更新するときは、SET句に「列名=値」をカンマで区切りで追加します。

次のSQLでは、COL1列とCOL2列の2つのカラムを同時に更新しています。

UPDATE
 tab1 
SET 
 col1 = 'test'
 ,col2 = 'B'
WHERE
 col4 = '001';

更新する列は2つ3つと増やすことが出来ます。
次のSQLでは、同時に3つのカラムを更新しています。

UPDATE
 tab1 
SET
 col1 = 'test'
 ,col2 = 'B'
 ,col3='100'
WHERE
 col4 = '001' ;

テーブル全件を一括更新する方法

UPDATE文では、表の全行、つまり全てのレコードを一括更新することが出来ます。

UPDATE文を記述するとき、WHERE句の条件は任意です。このWHERE句の条件を一切書かずにUPDATE文を実行すると、一度に全てのレコードを更新します。

次のSQLでは、TAB1テーブルのCOL1列の値を全てtestという文字列に更新しています。

UPDATE
 tab1
SET
 col1 = 'test';

テーブルのレコード件数が多い場合には、UPDATEにかかる時間が遅くなるので注意が必要です。

もしUPDATE文に時間がかかる場合はチューニングが必要です。
詳しくは「【SQL】UPDATE文が遅いときのチューニング方法」で解説していますのでぜひ参考にしてください。

テーブルの一部を更新する方法

UPDATE文では、表に存在するデータの中で、一部のレコードのみを対象として更新する方法があります。

更新する対象の行を絞る場合には、WHERE句の条件を指定します。

WHERE句はSET句の後ろに書きます。更新の対象とするレコードの条件を書くことで、表の一部だけを部分更新することが出来ます。

UPDATE
 tab1
SET
 col1 = 'test'
WHERE
 col2 = 'A';

WHERE句の条件には、LIKEやEXISTSを使うこともできます。

次のSQLでは、WHERE句にLIKEを指定し、更新対象をあいまい検索によって選択しています。

UPDATE
 tab1
SET
 col1 = 'test'
WHERE
 col2 LIKE 'A%';

次のSQLでは、WHERE句にEXISTSを使い、別のある表に一致するレコードが存在する場合だけ、更新対象としています。

UPDATE
 tab1 a
SET
 a.col1 = 'A'
WHERE
 EXISTS (SELECT
             'x'
         FROM
             tab2 b
         WHERE
             b.col2 = a.col2);

WHERE句に複数条件を指定する方法

UPDATE文のWHERE句には、複数の条件を指定することが出来ます。

WHERE句の条件の指定の仕方はSELECT文と同様に、ANDやORで条件をつなぎます。

次のSQLでは、「col2 = ‘A’」という条件と「col3 = ‘001’」という条件をANDでつないで更新対象を選択しています。

UPDATE
 tab1
SET
 col1 = 'test'
WHERE
 col2 = 'A'
 and col3 = '001';

テーブル名に別名(エイリアス)をつける方法

UPDATE文では、ASを使ってテーブル名に別名(エイリアス)を付けることが出来ます。
詳しくは「【SQL】UPDATEでテーブル名に別名(エイリアス)をつける」で解説していますのでぜひ参考にしてください。

UPDATE文のSQLサンプル

ここからはパターンごとにSQLのサンプルを使って書き方を紹介します。

列の値をNULL値で更新する場合

UPDATE文で列の値をNULLに更新することが出来ます。

NULL値で更新するときは、SET句にNULLキーワードを指定します。

次のSQLでは「col1 = NULL」とし、COL1列の値をNULL値に更新しています。

UPDATE
 tab1 
SET col1 = NULL;

文字列の置換やNULL値を変換する方法

UPDATE文を使うことで、文字列の置換やNULL値の変換が出来ます。
それぞれ別のページで紹介していますのでぜひ参考にしてください。

・文字列を一括置換する方法
 >>【SQL】文字列を一括置換する方法

・NULL値を空文字に更新する方法
 >>【SQL】UPDATEでNULL値を空文字にする方法

・0をNULLに置換する方法
 >>【SQL】0をNULLに置換する方法

CASE式を使う方法

UPDATE文では、CASE式を使って、条件分岐をさせて更新値を決めることが出来ます。

CASE式は、SET句に書き、条件によって更新する値を変更させます。

次のSQLでは、COL2列の値がAという文字列の場合は、COL1列の値をTESTという文字列に更新しています。COL2列の値がA以外の場合はNULL値で更新しています。

UPDATE
 tab1
SET
 col1 = CASE WHEN col2 = 'A'
             THEN 'TEST'
             ELSE NULL
        END;

CASE式についは他にもたくさんの使い方があります。
詳しくは「【SQL】UPDATEでCASE式を使って更新する方法」で解説していますのでぜひ参考にしてください。

複数テーブルを使って更新する方法

UPDATE文では、複数のテーブルを使って、データを更新する方法です。

次のSQLでは、TAB1テーブルとTAB2テーブルをJOINで結合し、TAB2テーブルの値で更新しています。

UPDATE tab1 a 
SET a.col1 = (SELECT b.col1 FROM tab2 b WHERE a.col2 = b.col2);

他にも、同じテーブルを使う方法もあります。
詳しくは「【SQL】UPDATEで列の値を同じテーブルの値で更新する方法」で解説していますのでぜひ参考にしてください。

UPDATE文のエラー

UPDATE文のエラーについては、別のページで紹介しています。

・更新対象が0件の場合
 >>【SQL】UPDATE文で更新対象なし0件でもエラーにならない

・NULL値に更新できない場合
 >>【SQL】UPDATEで「nullには更新できません」の対処法

UPDATE文の取り消し

UPDATE文は、トランザクションをコミット(commit)する前であれば、ロールバックによって取り消しが出来ます。

詳しくは「【SQL】UPDATE文を取り消しする方法」で解説していますのでぜひ参考にしてください。

その他

UPDATEとINSERTを同時に行う場合

UPDATEとINSERTを同時に行う場合は、UPDATE文ではなく、MERGE文を使います。

まとめ

UPDATE文を使うことで、レコードの列の値を更新することが出来ます。

UPDATE文の他にも、SELECT文やINSERT文、DELETE文といったSQLがあり、データの検索や追加、削除を行うことが出来ます。

具体的な書き方や使い方については、↓で詳しく解説していますのでぜひ参考にしてください。
 ・データの検索:【SQL】SELECT文の書き方:サンプル多数あり
 ・データの追加:【SQL】INSERT文の書き方:サンプル多数あり
 ・データの削除:【SQL】DELETE文の書き方:サンプル多数あり