技術広報のyayawowoです。
SQLの中でも、良く利用されるUPDATE文ですが、
今回はSQL入門編としまして、 UPDATE文の基本~応用をご紹介します!
※本説明では、PostgreSQL 9.6を利用します。
◆ 【SQL入門】PostgreSQL 関連記事
・【SQL入門】INSERT まとめ
・【SQL入門】DISTINCT 使い方
・RDBMSとDBMSについて【初心者向け】
・SQLの基本【まとめ】
・【RDBMS】PostgreSQLインストール・コマンド入門編
UPDATE 基本編
UPDATE文とは、「テーブル上の列の値を更新する」際に使用するSQL文です。
基本編に入る前に、説明時に利用するテーブルを作成します。
「【SQL入門】DISTINCT 使い方」でも利用した"動物テーブル"を利用します。
テーブル作成のSQL文と結果は以下の通りです。
◆ SQL文
--テーブル作成SQL文 CREATE TABLE sample_animal ( animal_no integer, animal_name text, animal_breed text, animal_sex text, skill_no integer, skill_name text ); --テストデータ作成SQL文 INSERT INTO sample_animal VALUES (1, '犬', '柴犬', '女', 1, null); INSERT INTO sample_animal VALUES (2, '犬', '柴犬', '男', 2, null); INSERT INTO sample_animal VALUES (3, '犬', 'チワワ', '男', 1, null); INSERT INTO sample_animal VALUES (4, '犬', 'プードル', '女', 3, null); INSERT INTO sample_animal VALUES (5, '犬', 'ゴールデン', '男', 2, null); INSERT INTO sample_animal VALUES (6, '猫', 'マンチカン', '男', 2, null); INSERT INTO sample_animal VALUES (7, '猫', 'ペルシャ', '男', 1, null); INSERT INTO sample_animal VALUES (8, '猫', 'ペルシャ', '女', 2, null); INSERT INTO sample_animal VALUES (9, '猫', 'アメリカンショートヘア', '男', 3, null); INSERT INTO sample_animal VALUES (10, '猫', 'ラグドール', '女', 1, null);
◆ 動物テーブル
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
2 | 犬 | 柴犬 | 男 | 2 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
4 | 犬 | プードル | 女 | 3 | (null) |
5 | 犬 | ゴールデン | 男 | 2 | (null) |
6 | 猫 | マンチカン | 男 | 2 | (null) |
7 | 猫 | ペルシャ | 男 | 1 | (null) |
8 | 猫 | ペルシャ | 女 | 2 | (null) |
9 | 猫 | アメリカンショートヘア | 男 | 3 | (null) |
10 | 猫 | ラグドール | 女 | 1 | (null) |
全レコードの更新
初めに、全レコードをUPDATEするSQL文を見てみましょう。
◆ 例題
- 動物テーブルのanimal_nameを「動物」にUPDATEする
◆ SQL文
--全レコードをUPDATE UPDATE sample_animal SET animal_name = '動物';
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
2 | 犬 | 柴犬 | 男 | 2 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
4 | 犬 | プードル | 女 | 3 | (null) |
5 | 犬 | ゴールデン | 男 | 2 | (null) |
6 | 猫 | マンチカン | 男 | 2 | (null) |
7 | 猫 | ペルシャ | 男 | 1 | (null) |
8 | 猫 | ペルシャ | 女 | 2 | (null) |
9 | 猫 | アメリカンショートヘア | 男 | 3 | (null) |
10 | 猫 | ラグドール | 女 | 1 | (null) |
👇
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 動物 | 柴犬 | 女 | 1 | (null) |
2 | 動物 | 柴犬 | 男 | 2 | (null) |
3 | 動物 | チワワ | 男 | 1 | (null) |
4 | 動物 | プードル | 女 | 3 | (null) |
5 | 動物 | ゴールデン | 男 | 2 | (null) |
6 | 動物 | マンチカン | 男 | 2 | (null) |
7 | 動物 | ペルシャ | 男 | 1 | (null) |
8 | 動物 | ペルシャ | 女 | 2 | (null) |
9 | 動物 | アメリカンショートヘア | 男 | 3 | (null) |
10 | 動物 | ラグドール | 女 | 1 | (null) |
全レコードをUPDATEすることは、業務上あまりないかと思います。 今回は、SQL文の基本のキということで、ご紹介させていただきました。
UPDATE文 × WHERE句
続いて、WHERE句(条件指定)を用いたUPDATEについて見てみましょう。
◆ 例題
◆ SQL文
--WHERE句を用いたUPDATE UPDATE sample_animal SET animal_breed = '土佐犬' WHERE animal_no = 1;
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
👇
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 土佐犬 | 女 | 1 | (null) |
UPDATE文 × IN句
前述したWHERE句はUPDATE対象の絞り込み時に利用しますが、限定した値をUPDATEする際はどうすれば良いでしょうか?
この際に利用するのがIN句になります。
早速例題とSQL文、実行結果を見てみましょう。
◆ 例題
- 動物テーブルのanimal_noが「2」と「3」の場合、animal_sexを「女」にUPDATEする
◆ SQL文
--IN句を用いたUPDATE UPDATE sample_animal SET animal_sex = '女' WHERE animal_no IN (2,3);
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
2 | 犬 | 柴犬 | 男 | 2 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
👇
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
2 | 犬 | 柴犬 | 女 | 2 | (null) |
3 | 犬 | チワワ | 女 | 1 | (null) |
上記のように、UPDATEしたいレコードに共通した条件がない場合にとても便利です。
UPDATE 応用編
では、応用編にうつります。
計算式を用いた更新
値を計算してUPDATEすることができます。
以下例題を見てみましょう。
◆ 例題
◆ SQL文
--skill_noに1を足すUPDATE UPDATE sample_animal SET skill_no = skill_no + 1 WHERE animal_no IN (1,3,5);
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
5 | 犬 | ゴールデン | 男 | 2 | (null) |
👇
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 2 | (null) |
3 | 犬 | チワワ | 男 | 2 | (null) |
5 | 犬 | ゴールデン | 男 | 3 | (null) |
animal_noが「1、3、5」のskill_noに1が足されました。
UPDATE文 × CASE文
条件分岐を行う際に用いられるCASE文を使い、一気に値をUPDATEすることができます。
◆ 例題
- 動物テーブルのskill_noが以下条件の場合、指定したskill_nameでUPDATEする
◆ SQL文
--CASE文を用いたUPDATE UPDATE sample_animal SET skill_name = CASE skill_no WHEN 1 THEN '走る' WHEN 2 THEN '飛ぶ' WHEN 3 THEN '泳ぐ' ELSE 'なし' END;
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
2 | 犬 | 柴犬 | 男 | 2 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
4 | 犬 | プードル | 女 | 3 | (null) |
5 | 犬 | ゴールデン | 男 | 2 | (null) |
6 | 猫 | マンチカン | 男 | 2 | (null) |
7 | 猫 | ペルシャ | 男 | 1 | (null) |
8 | 猫 | ペルシャ | 女 | 2 | (null) |
9 | 猫 | アメリカンショートヘア | 男 | 3 | (null) |
10 | 猫 | ラグドール | 女 | 1 | (null) |
👇
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | 走る |
2 | 犬 | 柴犬 | 男 | 2 | 飛ぶ |
3 | 犬 | チワワ | 男 | 1 | 走る |
4 | 犬 | プードル | 女 | 3 | 泳ぐ |
5 | 犬 | ゴールデン | 男 | 2 | 飛ぶ |
6 | 猫 | マンチカン | 男 | 2 | 飛ぶ |
7 | 猫 | ペルシャ | 男 | 1 | 走る |
8 | 猫 | ペルシャ | 女 | 2 | 飛ぶ |
9 | 猫 | アメリカンショートヘア | 男 | 3 | 泳ぐ |
10 | 猫 | ラグドール | 女 | 1 | 走る |
別テーブルの値を用いた更新
続いて別テーブルの値を使い、動物テーブルをUPDATEするSQL文をご説明します。
初めに別テーブルとして、スキルテーブルを作成します。
◆ SQL文
--テーブル作成SQL文 CREATE TABLE sample_skill ( skill_no integer, skill_name text ); --テストデータ作成SQL文 INSERT INTO sample_skill VALUES (1, '走る'); INSERT INTO sample_skill VALUES (2, '飛ぶ'); INSERT INTO sample_skill VALUES (3, '泳ぐ');
◆ スキルテーブル
skill_no | skill_name |
---|---|
1 | 走る |
2 | 飛ぶ |
3 | 泳ぐ |
では、スキルテーブルの値を使い、動物テーブルのanimal_skillをUPDATEしてみましょう!
◆ 例題
- 動物テーブルのskill_noが「1」の場合、スキルテーブルのskill_nameを用いて、動物テーブルのskill_nameをUPDATEする
◆ SQL文
--別テーブルの値を用いたUPDATE UPDATE sample_animal SET skill_name = ( SELECT sample_skill.skill_name FROM sample_skill WHERE sample_skill.skill_no = 1) WHERE skill_no = 1;
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | (null) |
3 | 犬 | チワワ | 男 | 1 | (null) |
7 | 猫 | ペルシャ | 男 | 1 | (null) |
10 | 猫 | ラグドール | 女 | 1 | (null) |
<スキルテーブル>
skill_no | skill_name |
---|---|
1 | 走る |
2 | 飛ぶ |
3 | 泳ぐ |
👇
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
1 | 犬 | 柴犬 | 女 | 1 | 走る |
3 | 犬 | チワワ | 男 | 1 | 走る |
7 | 猫 | ペルシャ | 男 | 1 | 走る |
10 | 猫 | ラグドール | 女 | 1 | 走る |
上記の通り、skill_name列がsample_skillテーブルが取得した値でUPDATEされました。
また、このように別テーブルに問い合わせる処理を「副問合せ(サブクエリ)」と言います。
別テーブルの値を条件にした更新
別テーブルの値を条件として、動物テーブルの値をUPDATEします。
◆ 例題
- スキルテーブルのskill_nameを条件とし、動物テーブルのskill_nameをUPDATEする
◆ SQL文
--別テーブルの値を条件にしたUPDATE UPDATE sample_animal SET skill_name = '潜る' WHERE skill_no IN ( SELECT sample_skill.skill_no FROM sample_skill WHERE sample_skill.skill_name = '泳ぐ');
◆ 実行結果
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
4 | 犬 | プードル | 女 | 3 | (null) |
9 | 猫 | アメリカンショートヘア | 男 | 3 | (null) |
<スキルテーブル>
skill_no | skill_name |
---|---|
1 | 走る |
2 | 飛ぶ |
3 | 泳ぐ |
👇
<動物テーブル>
animal_no | animal_name | animal_breed | animal_sex | skill_no | skill_name |
---|---|---|---|---|---|
4 | 犬 | プードル | 女 | 3 | 潜る |
9 | 猫 | アメリカンショートヘア | 男 | 3 | 潜る |
skill_noが「3」のskill_nameが「潜る」にUPDATEされたことが、実行結果からお分かりいただけるのはないでしょうか。
UPDATE まとめ
「【SQL入門】UPDATE まとめ」はいかがでしたでしょうか?
日頃からSQLを使った業務をされている方にとっては、基本的な内容だったかもしれません。
SQLの中でもUPDATE文は簡単な更新作業であれば気軽に使える命令ですが、様々な命令を組み合わせることがあると思います。
SQL入門の振り返りとして、本記事をご参考いただけますと幸いです!
最後までお読みいただきありがとうございました!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com