SQLのUPDATE文とDELETE文のサンプルです。
目次
更新する | UPDATE文 |
UPDATE文のset句で副問合せを使用する | |
UPDATE文のwhere句で副問合せを使用する | |
UPDATE文でCASE式を使用する | |
削除する | DELETE文 |
Truncate文 |
UPDATE文
UPDATE テーブル名 SET 列名1 = 値1 [,列名2 = 値2]・・・ WHERE (条件); |
- set句に更新する列名と値を記述します。
→更新する列が複数ある場合は、カンマで区切ります。 - where句の条件に合致した行を更新します。
→条件に合致した行が複数行の場合、複数行更新します。
→条件に合致する行がない場合、更新しません。 - where句がない場合、全ての行を更新します。
- set句とwhere句に副問合せを記述できます。
サンプル
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対してupdateでデータを更新します。
UPDATE syain
SET name = '安田', romaji = 'yasuda'
WHERE id = 2;
1行目は、updateの後にsyainテーブルを指定しています。
2行目は、nameとromajiの複数の列を更新するのでカンマで区切っています。
3行目は、id列を指定して更新する行を指定しています。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 安田 | yasuda |
3 | 佐藤 | sato |
2行目のname列とromaji列が更新されています。
UPDATE文のset句で副問合せを使用する
UPDATE文のset句で副問合せを使用するサンプルです。
以下のテーブルがあるとします。idは、number型(数値)です。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2つ目のテーブルです。
id | name |
---|---|
2 | TEST |
SQL
上記テーブルに対してupdate+set句の副問合せでデータを更新します。
UPDATE syain
SET name = (
select name from test
where id = 2)
WHERE id = 2;
2~4行目は、副問合せです。
3,4行目の結果の値を2行目のnameにセットします。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | TEST | tanaka |
3 | 佐藤 | sato |
2行目のname列は、TESTテーブルから取得した値で更新されています。
UPDATE文のwhere句で副問合せを使用する
UPDATE文のwhere句で副問合せを使用するサンプルです。
以下のテーブルがあるとします。idは、number型(数値)です。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
2つ目のテーブルです。
id | name |
---|---|
2 | TEST |
SQL
上記テーブルに対してupdate+where句の副問合せでデータを更新します。
UPDATE syain
SET name = 'テスト'
WHERE id in (
select id from test
where name = 'TEST');
3~5行目は、副問合せです。
4,5行目の結果の値を3行目のidにセットします。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | テスト | tanaka |
3 | 佐藤 | sato |
2行目のname列は、TESTテーブルから取得した値の行が更新されています。
UPDATE文でCASE式を使用する
UPDATE文でCASE式を使用するサンプルです(Oracle)。
条件によって更新する対象と値を変えることができます。
サンプル
以下のテーブルがあるとします。idは、number型(数値)です。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対してupdateとcase式でデータを更新します。
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行目の条件以外の場合になります。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木一郎 | i.suzuki |
2 | 田中二郎 | tokumei |
3 | 佐藤三郎 | tokumei |
それぞれの値が更新されます。
DELETE文
DELETE FROM テーブル名 WHERE (条件); |
- where句の条件に合致した行を削除します。
- where句の条件に合致した行が複数行の場合、複数行削除します。
- where句の条件に合致する行がない場合は何もしません。
- where句がない場合、全ての行を削除します。
- where句に副問合せを記述できます。
サンプル
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対してdeleteでデータを削除します。
DELETE FROM syain
WHERE id = 3;
1行目は、deleteの後にsyainテーブルを指定しています。
2行目は、削除する行を指定しています。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
id=3のデータが削除されました。
Truncate文
Truncate table テーブル名; |
- テーブルのデータを全て削除します。
- where句をつけることはできません。
- ロールバックできません。
- delete文より高速です。
- truncateは、切り捨てるという意味です。
サンプル
以下のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 佐藤 | sato |
SQL
上記テーブルに対してTruncate tableでデータを削除します。
Truncate table syain;
1行目は、Truncate tableの後にsyainテーブルを指定しています。
結果
id | name | romaji |
---|---|---|
syainテーブルのデータが全て削除されます。
syainテーブル自体は消えません。
リンク
以下は、MySQLのUPDATE構文のリンクです。
https://dev.mysql.com/doc/refman/5.6/ja/update.html
以下は、MySQLのDELETE構文のリンクです。
https://dev.mysql.com/doc/refman/5.6/ja/delete.html
関連の記事
SQL INSERT文のサンプル
SQL distinct 重複行を表示しないサンプル
SQL 複数の行をまとめる(集約関数/group by/having)
SQL INNER JOIN 内部結合のサンプル
SQL LEFT OUTER JOIN 外部結合のサンプル
SQL 副問合せのサンプル(サブクエリ)
SQL 自己結合のサンプル
SQL UNIONとUNION ALLのサンプル(結合して抽出)