基本情報技術者試験 (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 在庫数 = 0

DELETE 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 は行単位でしか消せないこと

よくある疑問

Q.UPDATE で WHERE を書き忘れるとどうなりますか?
A.表のすべての行が更新されます。エラーにはならず、静かに全行が書き換わります。DELETE も同じで、WHERE の無い DELETE は全行削除です。実務で最も恐ろしい書き忘れです。
Q.UPDATE の SET で 単価 = 単価 * 2 と書くと、連鎖して増え続けませんか?
A.増えません。右辺は更新前の値で評価されます。複数の列を同時に更新する場合も、すべての右辺が更新前の行に対して評価されるため、SET の書き順で結果が変わることはありません。
Q.INSERT で列名を省略できますか?
A.省略できます。その場合は表を定義したときの列の順番どおりに値を並べる必要があります。列が増減したときに壊れるので、実務では列名を明示するのが基本です。

INSERT / UPDATE / DELETE」の練習問題 1

読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。

自由に試す / 他のレッスンを読む

データベース分野をもっと学ぶ(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

プログラムの読み方でつまずいたら。

たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講