SQL INSERT INTO VALUES — テーブルへの行の追加

INSERT INTO ... VALUESで単一行および複数行を挿入する方法。PostgreSQL、MySQL、SQLiteのUPSERTパターンも解説します。

DML Commands

詳細な説明

INSERTによるデータの挿入

INSERT INTO文はテーブルに新しい行を追加します。単一行、複数行、またはサブクエリから導出された行を挿入できます。

単一行の挿入

INSERT INTO employees (name, email, department_id, salary)
VALUES ('Alice Smith', 'alice@example.com', 3, 95000);

複数行の挿入

INSERT INTO employees (name, email, department_id, salary)
VALUES
  ('Bob Jones', 'bob@example.com', 2, 87000),
  ('Carol White', 'carol@example.com', 3, 82000),
  ('Dave Brown', 'dave@example.com', 1, 76000);

SELECTからのINSERT

INSERT INTO archived_employees (name, email, salary)
SELECT name, email, salary
FROM employees
WHERE is_active = false;

UPSERT(挿入または更新)

PostgreSQL:

INSERT INTO employees (email, name, salary)
VALUES ('alice@example.com', 'Alice S.', 96000)
ON CONFLICT (email)
DO UPDATE SET name = EXCLUDED.name, salary = EXCLUDED.salary;

MySQL:

INSERT INTO employees (email, name, salary)
VALUES ('alice@example.com', 'Alice S.', 96000)
ON DUPLICATE KEY UPDATE name = VALUES(name), salary = VALUES(salary);

SQLite:

INSERT OR REPLACE INTO employees (email, name, salary)
VALUES ('alice@example.com', 'Alice S.', 96000);

挿入データの返却(PostgreSQL)

INSERT INTO employees (name, email, salary)
VALUES ('New Hire', 'new@example.com', 60000)
RETURNING id, name, created_at;

これは新しく挿入された行の自動生成されたidが必要な場合に特に便利です。

ユースケース

データベースに新しいレコードを作成するAPIエンドポイントを構築しており、初回挿入とレコードが既に存在する場合のUPSERTシナリオの両方を処理する必要がある場合。

試してみる — SQL Cheat Sheet

フルツールを開く