SQL UPDATE文のサンプル

SQLのUPDATE文で列の値を更新するサンプルです。

目次

サンプル UPDATE文 (列の値を更新する)
  別テーブルの値で更新する(set句で副問合せ)
  別テーブルの値を条件にする(where句で副問合せ)
数値を足して更新する
  値に応じて複数の列を更新する(CASE式)
  UPDATEとfromを使用(SQL Server)
  UPDATEとinner joinを使用(MySQL)
  updateの件数を指定する(MySQL)

UPDATE文 (列の値を更新する)

UPDATE  テーブル名
SET  列名1 = 値1,
        列名2 = 値2
WHERE  条件;
  • set句に更新する列名と値を記述します。
    →更新する列が複数ある場合は、カンマで区切ります。
  • where句の条件に合致した行を更新します。
    →条件に合致した行が複数行の場合、複数行更新します。
    →条件に合致する行がない場合、更新しません。
  • where句がない場合、全ての行を更新します。
  • set句とwhere句に副問合せを記述できます。

updateのサンプル

syainテーブルのid=2の行を、「name=田中,romaji=tanaka」から「name=竹田,romaji=takeda」に変更します。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

以下のSQLを実行します。

UPDATE syain
SET name = '竹田', 
    romaji = 'takeda'
WHERE id = 2;

1行目は、updateの後にsyainテーブルを指定しています。
2行目は、nameとromajiの2つの列を更新するのでカンマで区切っています。
3行目は、id列を指定して更新する行を指定しています。

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 竹田 takeda
3 佐藤 sato

2行目のname列とromaji列が更新されています。

 

別テーブルの値で更新する(set句で副問合せ)

update文のset句で副問合せを使用して更新できます。

1.testテーブルで条件を指定してnameの値(TEST)を取得します。
2.syainテーブルのid=2の行のnameに対して取得した値(TEST)で更新します。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
testテーブル
id name
2 TEST
6 TEST6

以下のSQLを実行します。

UPDATE syain
SET name = (
	select name from test
	where id = 2)
WHERE id = 2;

2~4行目は、副問合せです。
testテーブルを検索した値で更新しています。

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 TEST tanaka
3 佐藤 sato

2行目のname列は、TESTテーブルから取得した値で更新されています。

 

別テーブルの値を条件にする(where句で副問合せ)

update文のwhere句で副問合せを使用して更新できます。

1.testテーブルで条件を指定してidの値(2)を取得します。
2.syainテーブルのidに対して取得した値(2)を指定してnameを「テスト」で更新します。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
testテーブル
id name
2 TEST
6 TEST6

以下のSQLを実行します。

UPDATE syain
SET name = 'テスト'
WHERE id in (
	select id from test
	where name = 'TEST');

3~5行目は、副問合せです。
testテーブルの検索した値を条件にしています。

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 テスト tanaka
3 佐藤 sato

2行目のname列は、TESTテーブルから取得した値の行が更新されています。

 

数値を足して更新する

update文でテーブルの値に対して計算して更新できます。

SHOUHINテーブルのid=1の行のcountを1増やします。

SHOUHINテーブル
id name count
1 りんご 10
2 みかん 10

以下のSQLを実行します。

update SHOUHIN
set count = count + 1
where id = '1'

テーブルの値に1を足します。

SHOUHINテーブル
id name romaji
1 りんご 11
2 みかん 10

1足された値で更新されます。

 

値に応じて複数の列を更新する(CASE式)

1回のSQLで条件分岐の判断をして各行を更新できます。

例 

syainテーブルのname列に対して
id=1の行は、鈴木一郎に変更します。
id=2の行は、田中二郎に変更します。
id=3の行は、佐藤三郎に変更します。

syainテーブルのromaji列に対して
idが1より大きい行(id=2,id=3)は、tokumeiに変更します。
idが1のときは、i.suzukiに変更します。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

以下のSQLを実行します。

UPDATE syain
SET 
   name = case id
          when 1 then '鈴木一郎'
          when 2 then '田中二郎'
          when 3 then '佐藤三郎'
          end
  ,romaji = case
          when id > 1 then 'tokumei' 
          ELSE 'i.suzuki'
          end
WHERE id in (1,2,3);

3~7行目は、ひとつめのcase式でname列に対して更新します。
idの値によって更新の値が変わります。
8~11行目は、ふたつめのcase式でromaji列に対して更新します。
9行目はidが1より大きい場合という条件にしています。
10行目は、ELSEで9行目の条件以外の場合になります。

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木一郎 i.suzuki
2 田中二郎 tokumei
3 佐藤三郎 tokumei

1回のSQLで条件分岐の判断をして各行を更新しています。

 

UPDATEとfromを使用(SQL Server)

SQL Serverではupdateとfromを使用できます。

UPDATE テーブル1
SET  列名1 = 値1 [,列名2 = 値2]・・・
FROM  テーブル1
  INNER JOIN テーブル2 
  ON テーブルの結合条件;

from以下でテーブル結合します。
fromの結合結果が0件の場合は、更新されません。

syainテーブルとtestテーブルをidでINNER JOINして
testテーブルのname列の値(TEST)でsyainテーブルのname列を更新します。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
testテーブル
id name
2 TEST
6 TEST6

以下のSQLを実行します。

UPDATE syain
SET syain.name = test.name
FROM syain
INNER JOIN test
on syain.id = test.id and
test.id = 2;

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 TEST tanaka
3 佐藤 sato

 

UPDATEとinner joinを使用(MySQL)

MySQLではupdateとinner joinを使用できます。

UPDATE テーブル1
  inner join テーブル2
  on 結合条件
SET  列名1 = 値1 [,列名2 = 値2]・・・
WHERE  条件;

syainテーブルとtestテーブルをidでINNER JOINして
testテーブルのname列の値(TEST)でsyainテーブルのname列を更新します。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato
testテーブル
id name
2 TEST
6 TEST6

以下のSQLを実行します。

UPDATE syain 
	inner join test 
	on syain.id = test.id
SET syain.name = test.name
WHERE test.id = 2;

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 TEST tanaka
3 佐藤 sato

 

updateの件数を指定する(MySQL)

MySQLでは更新する件数を指定できます。

UPDATE syain
SET name = '件数テスト'
order by id
limit 2

3行目は、idの並び順を昇順にしてします。
4行目は、limitで上から2件のみ更新します。

リンク

以下は、MySQLのUPDATE構文のリンクです。
https://dev.mysql.com/doc/refman/5.6/ja/update.html

関連の記事

SQL INSERT文のサンプル
SQL UNIONとUNION ALLのサンプル(結合して抽出)

△上に戻る