OracleのINSERT SELECT(SELECTした結果をINSERTするパターン)

OracleのINSERT ~ SELECTのパターン

OracleでINSERTするには通常1レコードずつINSERTしますが、SELECTした結果をまとめてINSERTすることもできます。

INSERT ~ SELECT」のパターンを3つ紹介します。

  1. 列が同じテーブルのINSERT SELECTパターン
  2. 列を指定するINSERT SELECTパターン
  3. 指定データ&列を指定するINSERT SELECTパターン

順番に説明します。

例1. 列が同じテーブルのINSERT SELECTパターン

--テーブル2をテーブル1へINSERTする
--テーブル1とテーブル2は同じ列定義が前提
INSERT INTO table1 SELECT * FROM table2

サンプルテーブル

  • table1{a_no, a_name, a_address, a_flag}
  • table2{a_no, a_name, a_address, a_flag}

列の定義が同じテーブル同士(table1,table2)はこのようにINSERTで列を指定する必要がありません。最もシンプルな「INSERT SELECT」です。

特徴としてはINSERTなのに「VALUES」がないところですね。

例2. 列を指定するINSERT SELECTパターン

--e_tableのe_no,e_name,memo列をs_tableのs_no,s_name,memoへINSERTする
INSERT INTO s_table (s_no,s_name,memo)
 SELECT e_no,e_name,memo FROM e_table

サンプルテーブル

  • s_table{s_no, s_name, memo}
  • e_table{e_no, e_name, memo, e_address}

列の構成が異なるテーブルをINSERT SELECTする場合は、列を指定する必要があります。ここでは、「e_table」のSELECT結果を列を指定して「s_table」へINSERTしました。

例3. 指定データ&列を指定するINSERT SELECTパターン

--e_tableの特定の列&指定データをs_tableへINSERTする
INSERT INTO s_table (s_no,s_name,memo)
 SELECT e_no,e_name,'退職' FROM e_table

ここでは「s_no」「s_name」列はSELECTの結果をINSERTしていますが、「memo」は直接、文字列「’退職’」を指定しています。テーブルのSELECT結果と指定データを混在してINSERTするパターンですね。

別テーブルのSELECT結果をINSERTするパターンとして3つとりあげました。

以上、OracleのINSERT SELECT(SELECTしてINSERTする)のパターンでした。

コメント