SQL 速習チュートリアル

SQL INSERT INTO SELECT 文

1. SQL INSERT INTO SELECT 文

INSERT INTO SELECT 文は、既存のテーブルからデータをコピーし、それを別の既存のテーブルに挿入(インサート)するために使用されます。

このステートメントを使用するには、ソーステーブル(コピー元)とターゲットテーブル(コピー先)のデータ型が一致している必要があります。

       注意: ターゲットテーブルに既に存在する既存のレコードは影響を受けません。

2. INSERT INTO SELECT の構文

2.1 あるテーブルから別のテーブルへすべてのカラムをコピーする場合

INSERT INTO ターゲットテーブル
SELECT * FROM ソーステーブル
WHERE 条件;

注意: カラム名(列名)を省略する場合、ソーステーブルとターゲットテーブルのカラムの数と順序が完全に一致している必要があります。

2.2 特定のカラムのみをコピーする場合

INSERT INTO ターゲットテーブル (カラム1, カラム2, カラム3, ...)
SELECT カラム1, カラム2, カラム3, ...
FROM ソーステーブル
WHERE 条件;

3. デモ用データベース

以下は「Customers(顧客)」テーブルの抜粋です。

CustomerID CustomerNameContactName AddressCityPostalCode Country
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

こちらは「Suppliers(仕入先)」テーブルの抜粋です。

SupplierID SupplierNameContactNameAddressCityPostalCodeCountry
1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonEC1 4SDUK
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA
3Grandma Kelly's HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA

4. SQL INSERT INTO SELECT の使用例

4.1 特定のカラムをコピー

「Suppliers」のデータを「Customers」にコピーします(データが入力されないカラムには NULL が入ります)。

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;

4.2 すべてのカラムをコピー

「Suppliers」の全カラムを「Customers」にコピーします。

INSERT INTO Customers
SELECT * FROM Suppliers;

4.3 条件(WHERE 句)を指定してコピー

ドイツ(Germany)の仕入先のみを「Customers」にコピーします。

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';