基本情報技術者試験 (FE) 科目 A — データベース
INSERT・UPDATE・DELETE — 表を書き換える
INSERT は行の追加、UPDATE は既存行の値の変更、DELETE は行の削除を行う。UPDATE と DELETE で WHERE を省略すると、表のすべての行が対象になる。
データを書き換える 3 つの命令
ここまでは表を読むだけでした。データを変更する命令はDML(データ操作言語)と呼ばれ、3 つあります。
INSERT — 行を追加する
INSERT INTO 商品 (商品番号, 商品名, 分類, 単価)
VALUES ('P06', 'クリップ', 'C', 60)
-- 列名は省略できる(表定義の順に並べる)
INSERT INTO 商品 VALUES ('P06', 'クリップ', 'C', 60)列名を指定した場合、書かなかった列は NULL になります。 その列に非NULL制約が付いていればエラーです。
試す: 列名の指定を消すと、表定義の順に値を並べる必要がある
UPDATE — 既存の行を変更する
UPDATE 商品
SET 単価 = 単価 * 2
WHERE 分類 = 'B'SET の右辺は更新前の値で評価されます。単価 = 単価 * 2 は「更新前の単価の 2 倍」であり、 連鎖して増え続けることはありません。
試す: 単価 = 単価 * 2 を 2 回実行しても 4 倍にはならない (右辺は更新前の値)
DELETE — 行を削除する
DELETE FROM 在庫 WHERE 在庫数 = 0DELETE FROM 表名 の後に列は書きません。 行ごと消す命令なので、「この列だけ消す」はできません (それは UPDATE ... SET 列 = NULL です)。
試す: WHERE の行を消すと全行が削除対象になる (リセットで戻せます)
WHERE を忘れると全行が対象になる
これが DML で最も重要な一点です。
UPDATE 商品 SET 単価 = 0 -- 全商品の単価が 0 になる
DELETE FROM 在庫 -- 在庫が全部消えるどちらもエラーになりません。文法的に正しいからです。 下の Playground で WHERE の行を消して実行してみてください。 差分表示で全行が対象になることが一目で分かります。 (表はリセットボタンで元に戻るので、安心して試せます。)
試す: WHERE の行を消すと全 5 行が更新される
制約に違反する変更は拒否される
DML は制約の 検査を受けます。主キーの重複、参照先の無い外部キー、 非NULL 列への NULL などは実行時に拒否されます。 次のレッスンで詳しく扱います。
試験で問われるポイント
- WHERE の無い UPDATE / DELETE が全行を対象にすること
- UPDATE の右辺が更新前の値で評価されること
- INSERT で列名を省略したときの並び順
- DELETE は行単位でしか消せないこと
よくある疑問
「INSERT / UPDATE / DELETE」の練習問題 1 問
読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。
自由に試す / 他のレッスンを読む
データベース分野をもっと学ぶ(おすすめ書籍)
イラスト主体で科目Aの全範囲を通読できる入門書。用語の土台を作ってから科目Bのアルゴリズムに入ると理解が速い。
科目Aの頻出テーマを図と語呂で押さえる入門書。参考書と問題集を兼ねるので初受験の一冊目に選びやすい。
公開問題を大量に解いて仕上げるための問題集。擬似言語の読解に慣れた後、本番形式で時間配分を試す段階で使う。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)