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句で副問合せを使用する

UPDATE文の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行目は、副問合せです。
3,4行目の結果の値を2行目のnameにセットします。

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

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

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

 

where句で副問合せを使用する

UPDATE文の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行目は、副問合せです。
4,5行目の結果の値を3行目のidにセットします。

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

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

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

 

CASE式を使用する

UPDATE文で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のサンプル(結合して抽出)

△上に戻る