SQL 速習チュートリアル

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;