SQL UPDATE文でテーブルの行を更新するサンプル

目次

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

サンプル

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

 

解説

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

 

使用例

以下のemployeeテーブルのid=2の行のnameとromajiの値を変更します。

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

 

以下のSQLを実行します。

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

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

 

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

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

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

 

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

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

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

 

使用例

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

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

 

以下のSQLを実行します。

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

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

 

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

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

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

 

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

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

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

 

使用例

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

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

 

以下のSQLを実行します。

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

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

 

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

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

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

 

数値を足して更新する

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

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

UPDATE employee
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);

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

 

使用例 

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

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

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

 

以下のSQLを実行します。

UPDATE employee
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行目の条件以外の場合になります。

 

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

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

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

 

UPDATEとNNER JOINを使用(SQL Server)

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

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

 

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

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

 

使用例

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

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

 

以下のSQLを実行します。

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

 

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

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

 

UPDATEとinner joinを使用(MySQL)

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

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

 

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

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

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

 

以下のSQLを実行します。

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

 

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

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

 

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

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

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

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

 

関連の記事

SQL INSERT文でテーブルの行を追加するサンプル
SQL UNIONとUNION ALLのサンプル(結合して抽出)

△上に戻る