Access学習メモ 7-17. SQL基礎学習⑰

Access学習メモ 7-17. SQL基礎学習⑰

コンテンツ
学び
Acccessで扱えるSQLのひとつに、UPDATEがある。
テーブルに保管中のデータ(レコード)を自在に上書きすることができるSQLで、「更新クエリ」とも呼ばれる。

Accessは(私のように)プログラミングができないユーザーが
手軽にSQLを扱えるように開発されたソフトウェアなのだろう。
(OracleやSQLServerなどで用いられる標準SQL言語とは別物だろうけど)

Access学習用として使われるSQLは平たく言うと
作成済レコードを並べ替えたり組み合わせを楽しむ閲覧専用のSQL(安全)
レコードそのものを書き換えることができるSQL(取扱い注意)
と分類され、それぞれ趣旨が異なる。

UPDATEは「アクションクエリ」と呼ばれる命令文の一種で、
UPDATE(更新)
INSERT(追加)
DELETE(削除)
APPEND(追加)
MAKE TABLE(テーブル作成)など
目的に応じて多彩な文法が用意されている。

ちび怪獣たちが成長して大怪獣になったと想定し、名簿から「ちび」を外す。
そんなときには「M_名簿」テーブル「キャラクター名」フィールドに対し
「文字列中のちびを消す」指示を与えることで、全データを一括更新できる。

更新クエリ.png

UPDATE テーブル名
SET フィールド名='○○○';

UPDATE用SQLにReplace関数を組み合わせる。
この場合のReplaceは、文字列の置き換えを意味する。
Replace(元の文字列, 置換前, 置換後)という風に使う。

ただしSQLが成功すればテーブルの情報は上書き変更されてしまうので、
必要に応じ、あらかじめ元テーブルのバックアップをとっておく。

アクションクエリはテーブル内の情報を直接、編集できてしまう。
失敗すれば取り返しがつかない。
警告表示に毎回、心臓がバクバクする。
警告画面.png

バックアップは大切。テーブルは簡単にコピーできる。
同じ名称だと保存できないので、「BAK_M_名簿」などと名称を変える。
もっとも、名称を変えようとしなくてもAccess自らご丁寧に
「コピーします」などと名前を付けて安全な保存を促してくれる。
コピーします.png

SQL画面にコード記入後、完成したクエリデザイン画面
閲覧用SQL(選択クエリ)の際にはない「レコードの更新」という行が用意されてあった。
クエリデザイン.png

【Replaceの例】
元の文字列 = 「ちびゴジラ」
置換前 = 「ちび」
置換後 = 「""」(空文字)

UPDATE M_名簿
SET キャラクター名 = Replace([キャラクター名],"ちび","");

文字列の何処に「ちび」があっても
Replace("ちびゴジラ","ちび","")
Replace("ちびメカゴジラ","ちび","")
Replace("ちびギドラ(真ん中の首)","ちび","")
Replace("ちびギドラ(左の首)","ちび","")
Replace("ちびギドラ(右の首)","ちび","")
Replace("ちびモスラ","ちび","")
Replace("ちびラドン","ちび","")
Replace("ちびアンギラス","ちび","")
Replace("ちびヘドラ","ちび","")
Replace("ちびビオランテ","ちび","")
Replace("ちびミニラ","ちび","")
Replace("ちびガバラ","ちび","")
Replace("ちびガバラ","ちび","")
Replace("ちびチタノ","ちび","")
Replace("きれいなちびヘドラ","ちび","")
Replace("ちびJJ","ちび","")
Replace("ちびバトラ","ちび","")
などなど
Replace関数による空文字との置き換えで、消去することができる。

対象レコードを限定するならWHERE句で指定することも可。
UPDATE M_名簿
SET キャラクター名 = Replace([キャラクター名],"ちび","")
WHERE キャラクター名 = "ちびゴジラ";

複数名を指定する場合のWHERE句:
WHERE キャラクター名 IN ("ちびゴジラ","ちびメカゴジラ","ちびモスラ");

「名称の先頭に位置する『ちび』を消す」場合は、Mid関数でも可。
Midは Middle(ミドル)の略であり、Accessで使うMid()は
文字列の間の〇文字目から文字列を抽出することを意味する。
UPDATE M_名簿
SET キャラクター名 = Mid([キャラクター名],3);
「先頭3文字目から最後まで」を表示する働きを持つ。
なので、「ちび」のつく位置が皆の名前とはちがう
「きれいなちびへドラ」には、この関数は不適合(;・∀・)

更新(SQL実行)前テーブル
SQL実行まえ.png

更新(SQL実行)後テーブル
それぞれのキャラクター名から「ちび」の文字が消失しスッキリしてます。
SQL実行後.png

余談:
「ちび」を空文字列に置き換える代わりに、「大怪獣」としてみたら
UPDATE M_名簿
SET キャラクター名 = Replace([キャラクター名],"ちび","大怪獣");
ちびを大怪獣に.png
アッサリReplaceできてしまいました。 ↓↓↓
大怪獣に変更.png





サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す