目次
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の値を変更します。
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列を指定して更新する行を指定しています。
結果は、以下のとおりです。
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)で更新します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
id | name |
---|---|
2 | TEST |
6 | TEST6 |
以下のSQLを実行します。
UPDATE employee
SET name = (
select name from test
where id = 2)
WHERE id = 2;
2~4行目は、副問合せです。
testテーブルを検索した値で更新しています。
結果は、以下のとおりです。
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を「テスト」で更新します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
id | name |
---|---|
2 | TEST |
6 | TEST6 |
以下のSQLを実行します。
UPDATE employee
SET name = 'テスト'
WHERE id in (
select id from test
where name = 'TEST');
3~5行目は、副問合せです。
testテーブルの検索した値を条件にしています。
結果は、以下のとおりです。
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増やします。
id | name | count |
---|---|---|
1 | りんご | 10 |
2 | みかん | 10 |
以下のSQLを実行します。
update SHOUHIN
set count = count + 1
where id = '1'
テーブルの値に1を足します。
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に変更します。
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行目の条件以外の場合になります。
結果は、以下のとおりです。
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列を更新します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
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;
結果は、以下のとおりです。
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列を更新します。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
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;
結果は、以下のとおりです。
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のサンプル(結合して抽出)