サイトアイコン ITC Media

【SQL言語】UPDATE文のすべて|基本から応用まで実例付で解説

(最終更新月:2022年11月)

✔当記事はこのような方に向けて書かれています

「SQLのupdate文が書けるようになりたい!」

「SQLのUPDATE文でできることを全て知りたい!」

「SQLを学ぶにはどうしたら良いんだろう?」

✔当記事を通じてお伝えすること

当記事では、SQL言語におけるUPDATE文の基本はもちろん、できることや注意点、学習できる無料サイトまでご説明します。

ぜひ最後までご覧ください。

当記事の信頼性

当記事では、Python言語をベースとしたDjangoフレームワークで、アプリの公開方法をご紹介しています。

データの保存場所は、サーバー内で動くpostgreSQL(ポスグレ)です。

Djangoを使えばSQLをマスターしておく必要はないものの、最低限の知識として、かなり勉強しました。

実際のコードや写真付きで、できる限り丁寧に解説します。

※Djangoのチュートリアルはこちら。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

SQL言語:UPDATE文の基本

こちらでは、SQL言語で使うUPDATEの基本についてお伝えします。

SQL言語のUPDATEとは?

SQL言語のUPDATEは、既に保存したデータを書き換えるために使うものです。

一斉に書き換えをおこなったり、特定のデータだけ抜き出して書き換えたりと、さまざまな方法があります。

当記事では、色々なパターンに合わせた方法をご紹介していきます。

UPDATE文の基本構成

UPDATE文の基本構成は以下のとおり。

UPDATE テーブル名 SET カラム名=新しい値 (条件)

(条件)はあってもなくても良いものです。

以下のようなテーブル「itcblog」を例に、実際に値を編集してみます。

UPDATE itcblog SET text='新しい文章' where random_digit=5;

random_digitが5のレコードで、textが書き換えられたのがわかりますね。

UPDATE文で全カラムのレコードを一斉に更新する

条件を空にすると、レコードすべてを一斉に更新できます。

UPDATE itcblog SET random_digit=100;

UPDATE文で複数のレコードを更新する

カラムを「,」(カンマ)で繋げば複数のレコードを更新できます。

UPDATE itcblog SET random_digit=1500, title='同じタイトル';

UPDATE文の中で数式を使う

UPDATEで新しい値は、数式を使って入力できます。

UPDATE itcblog SET random_digit=random_digit*2;

すべて2倍しました。

SQL言語:UPDATE文での条件の書き方

こちらでは条件の書き方をご紹介します。

条件の書き方は主に2つ。

WHERE:特定の値を持つレコードを抜き出し、UPDATE

WHEREを使うと、ある一定の値を持つレコードのみ抜き出せます。

WHERE 条件

UPDATE itcblog SET title='WHEREで編集' WHERE random_digit=15;

WHERE…IN:レコードをまとめて抜き出し、UPDATE

WHEREとINを組み合わせて、複数の値を指定できます。

WHERE カラム名 IN (値1, 値2, …)

UPDATE itcblog SET text='INはまとめてレコードを書き換える' WHERE random_digit IN (5,15,24);

SQL言語:UPDATE文の応用

UPDATE文の応用をお伝えします。

できることはまだまだあるのです。

CONCAT:カラムの値を結合する

CONCATを使って、カラムの値を結合させられます。

CONCAT(カラム1, カラム2)

UPDATE itcblog SET text=CONCAT(title,text);

副問い合わせ:別テーブルの値を代入する

別テーブルの値を代入できます。(副問合せといいます)

以下のテーブルを使いましょう。「itcblog2」

UPDATE itcblog SET text=(SELECT text2 FROM itcblog2 WHERE itcblog2.id2=1) WHERE id=1;

CASE:値により内容を変化させる

CASEを使うと、値により、別のデータを代入できるようになります。

CASE カラム名 WHEN 値(条件) THEN 新しい値 WHEN 値2(ほかの条件) THEN 新しい値2;

UPDATE itcblog SET text=CASE random_digit WHEN 5 THEN 'ランダムナンバーは5です。' WHEN 24 THEN 'ランダムナンバーは24です。' END;

textの値を書き換えます。

random_digitが5のときは、「ランダムナンバーは5です。」

random_digitが24のときは、「ランダムナンバーは24です。」

該当しないものはすべて「NULL」になります。

SQLのUPDATEで気を付けるべきこと2選

UPDATEを使うときに注意すべてき点を頭に入れておきましょう。

知らないとエラーの原因となってしまいます。

PRIMARY_KEYをUPDATEしない

PRIMARY_KEYをUPDATEしないように気をつけましょう。

UPDATEでは、PRIMARY_KEYでもUPDATEできてしまうのです。

PRIMARY_KEYを変更するとあとで困ったことにもなりかねません。

本当に変更して良いカラムかをきちんと判断してください。

内容を複雑にしすぎない

UPDATE文を複雑にしすぎないことをおすすめします。

その理由は、複雑にしすぎると、何をどうしたかがわかりにくくなってしまうからです。

仮にエラーが発生しても、長過ぎる文章だと、どこをどう直せば良いかがわかりにくいでしょう。

少し面倒でも、できるだけ短いコードで、UPDATE文を作りましょう。

SQL学習でおすすめの無料サービス:SQL Fiddle

当記事で共有している写真も、SQL Fiddleを使ってご説明しました。

特徴は以下のとおり。

以下のように、左側でテーブルやカラムの設定をおこない、右側でコードが実行できるのです。

SQL言語を学ぶなら、登録してくことをおすすめします!

ちなみに今回のデータベース設定として、SQL Fiddleの左側に書いたコードはこちら。

CREATE TABLE itcblog(
  id SERIAL primary key,
  added timestamp NOT NULL default CURRENT_TIMESTAMP,
  title varchar(40),
  text varchar(255),
  random_digit integer NOT NULL
);

INSERT INTO itcblog (title,text, random_digit) VALUES ('SQL UPDATING', 'THIS IS the TEST', 5);  
INSERT INTO itcblog (title,text, random_digit) VALUES ('SQL LEARNING', 'THIS IS SQL Filddle', 8);
INSERT INTO itcblog (title,text, random_digit) VALUES ('PostgreSQL', 'THIS IS awesome!', 15);
INSERT INTO itcblog (title,text, random_digit) VALUES ('SQL UPDATING2', 'THIS is the TEST', 24);  
INSERT INTO itcblog (title,text, random_digit) VALUES ('SQL LEARNING2', 'THIS is SQL Filddle', 91);
INSERT INTO itcblog (title,text, random_digit) VALUES ('PostgreSQL2', 'THIS is awesome!', 7);

CREATE TABLE itcblog2(
  id2 SERIAL primary key,
  added2 timestamp NOT NULL default CURRENT_TIMESTAMP,
  title2 varchar(40),
  text2 varchar(255),
  random_digit2 integer NOT NULL
);

INSERT INTO itcblog2 (title2,text2, random_digit2) VALUES ('copied_SQL UPDATING', '(コピー)THIS IS the TEST', 5);  
INSERT INTO itcblog2 (title2,text2, random_digit2) VALUES ('copied_SQL LEARNING', '(コピー)THIS IS SQL Filddle', 8);
INSERT INTO itcblog2 (title2,text2, random_digit2) VALUES ('copied_PostgreSQL', '(コピー)THIS IS awesome!', 15);
INSERT INTO itcblog2 (title2,text2, random_digit2) VALUES ('copied_SQL UPDATING2', '(コピー)THIS is the TEST', 24);  
INSERT INTO itcblog2 (title2,text2, random_digit2) VALUES ('copied_SQL LEARNING2', '(コピー)THIS is SQL Filddle', 91);
INSERT INTO itcblog2 (title2,text2, random_digit2) VALUES ('copied_PostgreSQL2', '(コピー)THIS is awesome!', 7);

コピーして活用してください。

まとめ:SQLのUPDATEでできることはさまざま

当記事の内容をまとめます。

SQL言語は、そこまで複雑でないものの、覚えるまでが少し大変。

当記事でご紹介したSQL Fiddleなどの無料ツールを使い、いろいろとコードを書きながら是非覚えてください。

モバイルバージョンを終了