【SQL】INSERT文にWHERE条件を付ける方法

このページでは、ORACLEデータベースのSQLで、WHERE条件を付けて抽出したレコードをINSERTする方法を紹介します。

WHERE条件付きでSELECTした結果をINSERTする方法はいくつかあるので順々に紹介していきます。

INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり

INSERT文にWHERE条件を付ける方法

WHERE条件に一致するレコードを抽出する

INSERT文では、ある表からWHERE条件付きで、SELECTした結果をINSERTすることが出来ます。

サンプルでは、TAB2テーブルのCOL1列の値が’AAA’のレコードだけを抽出して、INSERTしています。

INSERT INTO tab1(col1,col2)
SELECT col1,col2 FROM tab2 WHERE col1 = 'AAA';

条件は複数つけることが出来ます。

次のサンプルでは、”COL2がNULL値のレコード”という条件を追加しています。

INSERT INTO tab1(col1,col2)
SELECT col1,col2 FROM tab2 WHERE col1 = 'AAA' AND col2 IS NULL;

EXISTSを使う方法

WHERE条件をつけるときによく使うのが、EXISTSやNOTEXISTSを使う方法です。

EXISTSはある表にデータ存在するかチェックすることが出来ます。

次のサンプルでは、TAB2テーブルのレコードで、TAB3テーブルに存在するレコードだけを抽出してINSERTしています。

INSERT INTO tab1(col1,col2)
SELECT
  a.col1
  ,a.col2
FROM
  tab2 a
WHERE
  EXISTS (SELECT
             'x'
          FROM
             tab3 b
          WHERE
             a.col1 = b.col1);

まとめ

今回はよく使うコードをサンプルとして記載しましたが、WHERE句の条件には、通常のSQLと同様にいくつも条件を付け加えることが出来ます。

このほか、INSERT文には様々な書き方があります。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。