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 name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

以下のSQLを実行します。

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

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

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

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

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

 

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

次の2つのテーブルがあるとします。

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句で副問合せ)

次の2つのテーブルがあるとします。

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 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

合計した値で更新されます。

 

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

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

以下のテーブルがあるとします。

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)

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

SQL Serverではupdateとfromを使用できます。
from以下でテーブル結合します。
fromの結合結果が0件の場合は、更新されません。

以下のテーブルがあるとします。

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)

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

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

以下のテーブルがあるとします。

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)

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

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

リンク

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

関連の記事

SQL INSERT文のサンプル
SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)
SQL UNIONとUNION ALLのサンプル(結合して抽出)

△上に戻る