RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【SQL入門】UPDATE まとめ

技術広報の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について見てみましょう。

◆ 例題

  • 動物テーブルのanimal_noが「1」の場合、animal_breedを「土佐犬」に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することができます。
以下例題を見てみましょう。

◆ 例題

  • 動物テーブルのanimal_no「1、3、5」に対し、skill_noに1を足す

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する
    • skill_no:1 → skill_name:走る
    • skill_no:2 → skill_name:飛ぶ
    • skill_no:3 → skill_name:泳ぐ
    • 上記以外 → skill_name:なし

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入門の振り返りとして、本記事をご参考いただけますと幸いです!

最後までお読みいただきありがとうございました!


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.