技術広報の yayawowo です。 SQL の中でも、良く利用されるUPDATE文ですが、 今回は SQL 入門編としまして、 UPDATE文の基本~応用をご紹介します! ※本説明では、 PostgreSQL 9.6を利用します。 UPDATE 基本編 全レコードの更新 UPDATE文 × WHERE句 UPDATE文 × IN句 UPDATE 応用編 計算式を用いた更新 UPDATE文 × CASE文 別テーブルの値を用いた更新 別テーブルの値を条件にした更新 UPDATE まとめ ◆ 【 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 入門の振り返りとして、本記事をご参考いただけますと幸いです! 最後までお読みいただきありがとうございました! エンジニア 中途採用 サイト ラク スでは、エンジニア・デザイナーの 中途採用 を積極的に行っております! ご興味ありましたら是非ご確認をお願いします。 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