(最終更新月: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などの無料ツールを使い、いろいろとコードを書きながら是非覚えてください。