【SQL】INSERT-SELECTの使い方:サンプル多数あり
このページでは、ORACLEデータベースで、INSERT-SELECTの書き方や使い方を解説していきます。
INSERT-SELECTとは、ある表からSELECTした結果をそのまま別の表にINSERTする方法です。
あるテーブルのデータをコピーしたいときや、テストするためにレコードを増やす場合に使います。
INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり
INSERT-SELECTの基本構文
INSERT-SELECTの基本的な使い方は次のとおりです。
テーブル1に、テーブル2からSELECTした結果を登録しています。
INSERT INTO テーブル名1 SELECT 列[,列] FROM テーブル名2;
※VALUESを記述するとエラーになります。
具体的な使い方については、SQLサンプルで紹介していきます。
INSERT-SELECTのSQLサンプル
ここからは用途別にSQLのサンプルを使って解説してきます。
1・テーブル定義(カラム)が同じ場合
テーブル定義が同じ場合は、SELECT句に*を使うことが出来ます。
TAB1テーブルとTAB2テーブルのカラムの数やデータ型が一致している場合、SELECT * ~でデータを抽出し、そのまま登録することが出来ます。
INSERT INTO tab1 SELECT * FROM tab2;
2・列を指定する方法
データを抽出するテーブルと登録するテーブルの定義が一致しない場合は、登録先のテーブルに合わせて、列を指定します。
INSERT INTO tab1 SELECT col1,col2,col3 FROM tab2;
3.固定値を登録する方法
INSERT-SELECTでレコードを登録するときに、ある列だけ固定値を登録することができます。
次のサンプルでは、3つ目の項目に’test’という固定値を登録しています。
INSERT INTO tab1 SELECT col1,col2,'test' FROM tab2;
4.NULL値を登録する方法
NULL値を登録したいときは、SELECT句にNULLを指定します。
NULL値はNULL、もしくはnullと記述します。
INSERT INTO tab1 SELECT col1,col2,NULL FROM tab2;
5.関数を使う方法
INSERT-SELECTでは、SELECT句で関数を使うこともできます。
次のSQLのようにMAX,MIN,NVLなど様々な関数を使うことが出来ます。
INSERT INTO tab1 SELECT col1,MAX(col2),MIN(col3),NVL(col4) FROM tab2;
6.WHERE句で条件を指定する方法
INSERT-SELECTするときに、SELECTするデータにWHERE句で条件を指定して、抽出するレコードを絞り込むことが出来ます。
INSERT INTO tab1 SELECT * FROM tab2 WHERE col1 = 'ABC';
7.CASEを使う方法
INSERT-SELECTでCASEを使うことが出来ます。
サンプルでは、SELECT句でCASE式を使って登録する値を条件に合わせて変更しています。
INSERT INTO tab1
SELECT
col1
,col2
,CASE WHEN col1 = 'A' THEN 'AAAA'
WHEN col1 = 'B' THEN 'BBBB'
ELSE NULL
END
FROM
tab2
WHERE
col1 = 'ABC';
8.同じテーブルから同じテーブルに登録する方法
INSERT-SELECTでは、同じテーブルにデータを登録することが出来ます。
サンプルのように、SELECTするときに一部の値を変更することや対象データを選択して登録することも出きます。
INSERT INTO tab1 SELECT col1,col2,'test' FROM tab1 WHERE col1 = 'ABC';
9.SELECTの結果が0件の場合
INSERT-SELECTのデータをSELECTした結果が0件の場合には、データが登録されません。
ただし、SQL自体はエラーとならず、0件登録しましたという形で正常終了します。
データが登録されなくてもエラーにならないので、きちんとデータが登録されているかは確認するようにしましょう。
プログラムで実装する場合も注意が必要です。
まとめ
INSERT-SELECTは、INSERTとSELECTの組み合わせなので、かなり自由度にコーディングすることが出来ます。
このほか、INSERT文には様々な書き方があります。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。