【SQL】データ追加 ~ INSERT文 / SELECT INSERT文 ~

■ 準備

使用するテーブル(PostgreSQLの場合)

person
CREATE TABLE person
(
  id character(8) NOT NULL,
  name character varying(100),
  sex character(1),
  updatedate timestamp without time zone,
  CONSTRAINT person_pkey PRIMARY KEY (id)
)
worker
CREATE TABLE worker
(
  id character(8) NOT NULL,
  name character varying(100),
  sex character(1),
  updatedate timestamp without time zone,
  CONSTRAINT worker_pkey PRIMARY KEY (id)
)

■ データの追加

 *  「INSERT INTO ~ VALUES ~」を使用

構文

INSERT INTO 【テーブル名】(
            【追加対象項目1】(,【項目2】...))
    VALUES ( 【追加対象データ1】(,【データ2】...));

サンプル

INSERT INTO person(
            id, name, sex, updatedate)
    VALUES ('X0000001', 'Mike', 'm', NOW());

■ 一括で複数データの追加

 * 「VALUES (...);」をカンマ区切りで「VALUES (...),...,(...);」

構文

INSERT INTO 【テーブル名】(
            【追加対象項目1】(,【項目2】...))
    VALUES ( 【追加対象データ1-1】(,【データ2-1】...)),
           ( 【追加対象データ1-1】(,【データ2-1】...)),
           ( ...);

サンプル

INSERT INTO person(
            id, name, sex, updatedate)
    VALUES ('X0000002', 'Sam', 'm', NOW()),
           ('X0000003', 'Tom', 'm', NOW()),
           ('X0000004', 'Amy', 'f', NOW()),
           ('X0000005', 'Naomi', 'f', NOW()),
           ('X0000006', 'Ken', 'm', NOW());

■ 別テーブルから取得してきたデータを追加

 *  SELECT INSERT文「INSERT INTO ~ SELECT ~」を使用

構文

INSERT INTO 【テーブル名(追加先)】(
            【追加対象項目1】(,【項目2】...))
    SELECT  【追加対象データ1】(,【データ2】...)
        FROM 【テーブル名(追加元)】  (WHERE 【条件式】);

サンプル

テーブルのデータをコピー
INSERT INTO worker(
            id, name, sex, updatedate)
    SELECT id, name, sex, updatedate
      FROM person;

補足:SELECT文でフィールドの一部だけを使って、INSERTしたい場合

https://oshiete.goo.ne.jp/qa/162964.html
より、固定値('m'とかの部分)にすればいい
INSERT INTO worker(
            id, name, sex, updatedate)
    SELECT id, name, 'm', '2018-01-30 00:00:00'
      FROM person;

関連記事

データ追加 ~ INSERT文 ~

http://blogs.yahoo.co.jp/dk521123/16106035.html

データ修正 ~ UPDATE文 ~

http://blogs.yahoo.co.jp/dk521123/18086535.html

データ削除 ~ DELETE文/TRUNCATE TABLE文 ~

http://blogs.yahoo.co.jp/dk521123/18350647.html

MySQL での データ移行 を考える

* SELECT INSERT文は、データ移行としても使える
http://blogs.yahoo.co.jp/dk521123/36589352.html