既に存在するレコードを変更するUPDATE文

テーブルに新規レコードを挿入するのにINSERT INTO文を使うことは既に学びました。それに対して、すでに登録したレコードの内容を修正したい場合にはUPDATE文を使います。

基本構文

UPDATE文の構文

UPDATE テーブル名 SET カラム名1値1 [, カラム名2値2 …]

指定したカラムに指定した値をセットします。

この基本構文だとテーブル上のすべてのレコードに同じ値をセットしてしまうため、多くの場合変更対象のレコードを特定するためにWHERE句を組み合わせます。

WHERE句を使う場合の構文

UPDATE テーブル名 SET カラム名1値1 [, カラム名2値2 …] WHERE 条件式

WHERE句の条件式には、SELECT文と同じものが使えます。WHERE句の条件に当てはまるレコードが1件もない場合でもエラーにはなりません。どのレコードも値が変更されないだけです。

UPDATE文によってデータを修正するとき、修正前の値はどこにも保存されません。つまり一般のアプリケーションのような『UNDO』機能はありません。よってWHERE句の条件式や修正するデータの値などに間違いが無いように注意する必要があります。

UPDATEの例

SQL
UPDATE meibo
SET name='六分儀シンジ', ruby='ロクブンギシンジ'
WHERE id=2;

id=2のレコードのname とrubyの値が変化しているのをphpmyadminで確認してみましょう。

練習13-1

テーブル ex_shohin の id=3 のレコードの price の値を170に変更するSQLを記述しなさい。

計算の結果を代入する


UPDATE文でカラムに代入する『値』の部分には、固定の値ではなく計算式を記述することもできます。

代入する値に計算式を使う例

SQL
UPDATE meibo
SET height=height+1

コンピュータプログラミングの経験の無い人にはheight=height+1 という記述が奇妙に見えるかもしれませんが、この場合の『=』は『左辺と右辺が等しい』という意味ではなく、『右辺の計算結果を左辺で表すカラムに第入』という意味です。

またこの例ではWHERE句を使用していませんので、全レコードが対象となります。
したがって、このSQLを実行すると、全レコードの height が1ずつ増えます。

実行結果

練習13-2

テーブルex_shohinの全レコードのpriceの値を10ずつ増やすSQLを記述しなさい。

代入する値に計算式を使う例2

より複雑な計算式を使うこともできます。

実験のため、テーブルmeibo に以下のカラムを追加して下さい。

列名データ型
BMIFLOAT

次に以下のSQLを実行してみましょう。

SQL
UPDATE meibo
SET BMI = ROUND(weight/ POW(height/100 , 2), 1)

すべてのレコードについて、heightカラムとweightカラムの値を用いて計算した値をBMIカラムに代入しています。

実行結果

練習13-3

(1)テーブルex_shohin に以下のカラムを追加して下さい。

列名データ型
taxINT

(2)テーブルex_shohin上の全レコードについて、消費税額(priceカラムの値のの8%)を計算し、taxカラムに代入するSQLを記述しなさい。

代入する値に計算式を使う例3

もちろん計算結果の代入の場合も、WHERE句と組み合わせて条件に合ったレコードのみ値を変更することができます。

SQL
UPDATE meibo
SET height = height - 10
WHERE id IN (1,3)
実行結果


コメント

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