OracleのINSERT ~ SELECTのパターン
OracleでINSERTするには通常1レコードずつINSERTしますが、SELECTした結果をまとめてINSERTすることもできます。
「INSERT ~ SELECT」のパターンを3つ紹介します。
- 列が同じテーブルのINSERT SELECTパターン
- 列を指定するINSERT SELECTパターン
- 指定データ&列を指定する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する)のパターンでした。
コメント