情報処理とは何から、データベースの基本的な話(情報処理試験のデータベーススペシャリスト程度の話まで)を書く、土日のシリーズ「Hello World程度のデータベース」です。
いま、SQLをやっています。
SQLは検索(select)、挿入(insert)、削除(delete)、更新(update)とあって、今回はUPDATEです。
■UPDATEの構文
UPDATEの構文は、
UPDATE テーブル名 SET 項目名=値,・・・・・ WHERE 条件式
のカタチです。
で、このSET 項目名=値の値に対して
・固定値をセットする
・同一テーブルの項目値を(計算して)セットする
・他テーブルの項目値をセットする
というケースがあります。
■固定値をセットする
これは、簡単で、たとえば、OUBO_TBLのOUBOIDが4の人のOUBONENを2006にする場合、
UPDATE OUBO_TBL SET OUBONEN = 2006 WHERE OUBOID=4;
でいいわけです。OUBONENは数字なので2006のように、数字をかいていますが、
SEI_KANAのように文字項目だったら、SEI_KANA='こうさか'のように、'でかこみます。
■同一テーブルの項目値を(計算して)セット
値のところには、計算式(関数で計算した結果もOK)がかけます。
なので、たとえば、上記のもので、OUBONENを1足すというようにするのであれば、
UPDATE OUBO_TBL SET OUBONEN = OUBONEN+1 WHERE OUBOID=5;
となります。
なお、計算式で計算する場合、同じ項目がいくつも出てきたらどうするのかについて、
詳しくは、
ここ http://dev.mysql.com/doc/refman/4.1/ja/update.html
のUPDATE は左から右へ評価されますを参照してください。
■他テーブルの項目値をセットする
MySQLでは、4.0からできるそうなのですが、他のテーブルの値を参照してセットすることが出来ます。その場合は、テーブル名で書くテーブルは、変更するテーブルだけでなく、参照するテーブルも書きます。また、WHERE句の後に書く条件は、JOIN句で書く条件も書きます。
たとえば、SHAIN_TBLのNYUSYANENは、OUBO_TBLのOUBONENに1年足したものとします。
(SHAIN_TBLのSHAINIDとOUBO_TBLのSHAINIDが、JOINするキー)
その場合は、こんなSQLです。
UPDATE OUBO_TBL, SHAIN_TBL SET SHAIN_TBL.NYUSYANEN = OUBO_TBL.OUBONEN+1
WHERE OUBO_TBL.SHAINID=SHAIN_TBL.SHAINID;
ということで、UPDATEがおわりました。
ということでSQLもおわりで、
ということは、ここで3層スキーマの話も終わりということにします。
ということで、次回は、DB操作をするのは、どういう仕組みで行うかという話になります。