SQL ステートメント INSERT INTO SELECT は、あるテーブルからデータをコピーし、それを別のテーブルに挿入します。
INSERT INTO SELECT ステートメントでは、ソース テーブルとターゲット テーブルのデータ型が一致する必要があります。
すべての列をあるテーブルから別のテーブルにコピーします。
INSERT INTO table2
SELECT *
FROM table1
WHERE condition
あるテーブルから別のテーブルに一部の列のみをコピーします。
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition
このチュートリアルでは、有名なサンプル データベース「Northwind」を使用します。
以下はテーブル「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. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
テーブル「Suppliers」(「サプライヤー」) のサンプル:
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country | Phone |
---|---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK | (171) 555-2222 |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA | (100) 555-4822 |
3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA | (313) 555-5735 |
4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai Musashino-shi | Tokyo | 100 | Japan | (03) 3555-5011 |
5 | Cooperativa de Quesos 'Las Cabras' | Antonio del Valle Saavedra | Calle del Rosal 4 | Oviedo | 33007 | Spain | (98) 598 76 54 |
次の SQL クエリは、「Suppliers」 (「サプライヤー」) を「Customers」 (「顧客」) にコピーします (データが入力されていない列には NULL が含まれます)。
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country
FROM Suppliers
SQL クエリの別のバージョンは、「サプライヤー」テーブルから「顧客」テーブルにデータをコピーします (すべての列を埋めます)。
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country
FROM Suppliers
次の SQL ステートメントは、ドイツのサプライヤーのみを Customers テーブルにコピーします。
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country
FROM Suppliers
WHERE Country = 'Germany'