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

SQL

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

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

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

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

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

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

  • SQL言語のUPDATE文の基本
  • SQL言語のUPDATE文の応用・できること
  • SQL言語のUPDATE文で気を付けること

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

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

当記事の信頼性

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

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

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

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

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

SQL言語:UPDATE文の基本

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

  • UPDATEとは?
  • UPDATE文の基本構成
  • UPDATE文で全カラムのレコードを一斉に更新する
  • UPDATE文で複数のレコードを更新する
  • 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:特定の値を持つレコードを抜き出す
  • WHERE…IN:レコードをまとめて抜き出す

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:カラムの値を結合する
  • 副問い合わせ:別テーブルの値を代入する
  • JOIN:別テーブルの値を代入する
  • CASE:値により内容を変化させる

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しない

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

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

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

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

内容を複雑にしすぎない

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

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

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

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

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

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

特徴は以下のとおり。

  • SQL言語がブラウザ打てて、実行できる
  • 完全無料
  • 登録不要

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

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言語のUPDATE文の基本構成を覚えよう
  • SQL言語のUPDATE文では、複数のカラムや一斉に変更することもできる
  • SQL言語のUPDATE文では、本当に変更してよいのかを慎重に考えるべき

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

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

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

公式LINEも始めました。記事更新についてや、当ブログ内の人気記事などの情報を定期的に配信しています。

友だち追加

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCに投げ銭をする

タイトルとURLをコピーしました