基本 ローカル(VS Code + Java) 約20分

INSERT・UPDATE・DELETE の基本

INSERT、UPDATE、DELETE を使い、データの追加、更新、削除を安全に行う基本を学ぶレッスン。

前回は SELECT でデータを取り出す方法を学びました。今回は残りの3操作 — データの追加、更新、削除を扱います。これで CRUD(クラッド)がそろいます。

前回と同じく DB Browser for SQLite(practice.db)を使います。

CRUD とは

Web アプリで行うデータ操作は、大きく4つに分類できます。

操作英語SQL
作成CreateINSERT
読み取りReadSELECT
更新UpdateUPDATE
削除DeleteDELETE

この4つの頭文字を並べた CRUD は、Web 開発で頻繁に出てくる用語です。Spring Boot の回でも「CRUD アプリを作る」という形で登場します。

INSERT — 行を追加する

前回、テーブル作成時に使った INSERT をもう少し詳しく見ます。

全列を指定して追加

INSERT INTO employees (id, name, department, age)
VALUES (6, '中村亮', '開発部', 27);

追加できたか確認します。

SELECT * FROM employees WHERE id = 6;
idnamedepartmentage
6中村亮開発部27

列名を省略するパターン

テーブルの全列に値を入れる場合、列名を省略することもできます。

INSERT INTO employees VALUES (7, '小林真理', '営業部', 30);

ただし、列の順番を正確に覚えていないとミスの原因になります。列名を明示する書き方のほうが安全です。

UPDATE — 行を更新する

既存のデータを変更するには UPDATE を使います。

WHERE で対象を指定して更新

UPDATE employees SET department = '総務部' WHERE id = 3;

「id が3の社員の部署を総務部に変更する」という意味です。確認してみます。

SELECT * FROM employees WHERE id = 3;
idnamedepartmentage
3佐藤次郎総務部25

元は「開発部」だったのが「総務部」に変わっています。

複数の列を同時に更新

SET のあとにカンマで区切って複数の列を指定できます。

UPDATE employees SET department = '開発部', age = 26 WHERE id = 3;

WHERE を忘れると全行が更新される

SQL では -- から行末までがコメントです。実行されないメモとして使えます。

-- 危険な例(実行しないでください)
UPDATE employees SET department = '開発部';

WHERE がないと、テーブルの全行が対象になります。全員の部署が「開発部」に書き換わってしまいます。UPDATE を書くときは「WHERE を書いたか」を必ず確認する習慣をつけてください。

DELETE — 行を削除する

行を削除するには DELETE を使います。

WHERE で対象を指定して削除

DELETE FROM employees WHERE id = 7;

「id が7の行を削除する」という意味です。

SELECT * FROM employees WHERE id = 7;

結果が0件なら削除が成功しています。

WHERE を忘れると全行が削除される

-- 危険な例(実行しないでください)
DELETE FROM employees;

WHERE がないと、テーブル内の全行が削除されます。UPDATE と同じく、WHERE の確認が重要です。

もとに戻す場合

練習中にデータが崩れた場合は、テーブルを削除して作り直せます。

DROP TABLE employees;

そのあと、前回の CREATE TABLE と INSERT を再実行すれば初期状態に戻ります。

まとめ

SQL役割注意点
INSERT INTO テーブル (...) VALUES (...)行を追加する
UPDATE テーブル SET 列=値 WHERE 条件行を更新するWHERE がないと全行が対象
DELETE FROM テーブル WHERE 条件行を削除するWHERE がないと全行が対象

次の回へ

INSERT で行を追加し、UPDATE で変更し、DELETE で削除できたら CRUD の基本操作は完了です。次の回では、複数のテーブルを結合する JOIN を扱います。