SQL SELECT INTO 文
1. SQL SELECT INTO 文の概要
SELECT INTO 文は、既存のテーブルからデータを抽出して、新しいテーブルを作成し、そこにデータを流し込むために使用されます。
この文は、データのバックアップ作成や、分析用の一時テーブル(Temporary Table)を構築する際に非常に有用です。
注意: 新しいテーブルは、ソーステーブル(コピー元)で定義されているものと同じカラム名とデータ型で作成されます。ただし、プライマリーキー(主キー)、インデックス、NOT NULL 制約などは自動的には引き継がれませんので注意してください。
2. SELECT INTO の構文
2.1 テーブル全体を新しいテーブルにコピーする場合
SELECT * INTO 新テーブル名 [IN 外部データベース]
FROM ソーステーブル名
WHERE 条件;2.2 特定のカラムのみを新しいテーブルにコピーする場合
SELECT カラム1, カラム2, カラム3, ...
INTO 新テーブル名 [IN 外部データベース]
FROM ソーステーブル名
WHERE 条件;3. SQL SELECT INTO の使用例
3.1 バックアップの作成
次の SQL は、「Customers」テーブルのバックアップコピーを作成します。
SELECT * INTO CustomersBackup2026
FROM Customers;3.2 外部データベースへのコピー
次の SQL は、別のデータベース('Backup.mdb')内に「Customers」テーブルのバックアップコピーを作成します。
SELECT * INTO CustomersBackup2026 IN 'Backup.mdb'
FROM Customers;3.3 特定のカラムのみをコピー
次の SQL は、「Customers」テーブルから特定のカラムのみを抽出して、新しいテーブルを作成します。
SELECT CustomerName, ContactName INTO Customers2
FROM Customers;3.4 条件に一致するデータのみをコピー
次の SQL は、「Customers」テーブルのうち、国(Country)が 'USA' の顧客のみを抽出し、新しいテーブルにコピーします。
SELECT * INTO US_Customers
FROM Customers
WHERE Country = 'USA';3.5 複数のテーブルからデータをコピー
次の SQL は、JOIN を使用して複数のテーブルからデータを抽出し、一つの新しいテーブルにまとめます。
SELECT Customers.CustomerName, Orders.OrderID INTO CustomersOrder
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;4. スキーマのみをコピーして空のテーブルを作成する
SELECT INTO は、他のテーブルの構造(スキーマ)だけを再利用して、新しく空のテーブルを作成する場合にも使えます。その際は、常に FALSE となるような WHERE 句を追加して、データが 1 件も返されないようにします。
SELECT * INTO 新テーブル名
FROM ソーステーブル名
WHERE 1 = 0;