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 | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
こちらは「Suppliers(仕入先)」テーブルの抜粋です。
| SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
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';