表面的には、データの複製は非効率的に見えるかもしれません。同じテーブルのほぼ正確なコピーが必要な場合には、非常に重要な役割を果たすことがあります。
SQL では、さまざまな方法やテクニックを使用して既存のテーブルをコピーし、新しい名前で同じデータを持つ新しいテーブルを作成できます。これは、バックアップ、データ変換、メインテーブルに影響を与えない一時的なデータ変更などの特定のタスクで非常に役立ちます。
このガイドでは、これらの方法を検討し、SQL データベースのテーブルをコピーする方法を学びます。さまざまな SQL データベース エンジンがテーブルのコピーを処理する方法が異なるため、各データベースのすべての方法を説明するわけではありません。
サポートされているデータベース エンジンごとに少なくとも 1 つを取り上げ、サポートされているデータベース エンジンごとにテーブルをコピーする方法を示します。
方法 1: グローバル (CREATE TABLE ステートメントを使用)
テーブルをコピーする最も一般的で単純な方法は、CREATE TABLE ステートメントを使用することです。
通常の CREATE TABLE ステートメントとは異なり、ソース テーブルの構造とデータを含む SELECT ステートメントを渡します。
構文は次のとおりです。
CREATE TABLE new_table AS
選択する * FROM source_table;
これにより、ソーステーブルから指定された名前で新しいテーブルを作成できるようになります。
例として、Sakila サンプル データベースを考えてみましょう。レンタルテーブルと同様のテーブルを作成するとします。
次のクエリ例に示すように、前の手法を使用できます。
CREATE TABLE rental_copy AS選択する * レンタルから。
これにより、レンタル テーブルと同じ構造とデータを含む「rental_copy」という新しいテーブルが作成されます。
次のようにテーブルからデータを選択することで確認できます。
選択する * FROM rental_copy;
これには、レンタル テーブルとして正確なデータが含まれている必要があります。
方法 2: グローバル (INSERT INTO ステートメントを使用)
さまざまな SQL データベースでグローバルにサポートされているもう 1 つの方法は、INSERT INTO ステートメントを使用することです。
この手法を使用すると、あるテーブルから別のテーブルにコピーできます。 CREATE TABLE や SELECT とは異なり、このメソッドではデータを選択的にフェッチできます。
これは、コピープロセスでより詳細な制御が必要な場合に便利です。次のような構文を使用できます。
INSERT INTO target_table ( 列1、列2、... )SELECT 列 1、列 2、...
FROM source_table;
この場合、実際に元のテーブルからすべてをフェッチしなくても、新しいテーブルに含めたい列を指定できます。
たとえば、次のクエリを考えてみましょう。
入れるの中へ
レンタルコピー ( レンタルID、
レンタル日、
戻り日 )
選択する
レンタルID、
レンタル日、
戻り日
から
レンタルr;
この方法の欠点の 1 つは、含めたい列を含む同様のテーブルを作成する必要がある場合があることです。大規模なデータセットを操作する場合、これは反復的かつ効率的です。
方法 3: テーブル構造をコピーする
また、テーブルにデータを格納する必要がなく、テーブルの構造に興味がある場合もあります。
このようなシナリオでは、次のように CREATE TABLE ステートメントを LIKE 句と組み合わせて使用できます。
CREATE TABLE new_table ( LIKE source_table ) ;
これにより、実際にデータをコピーすることなく、指定された名前と「source_table」と同様の構造を持つ新しいテーブルが作成されます。
データベース間でのテーブルのコピー
異なるデータベース間でテーブルをコピーするには、ソース データベースからデータをエクスポートし、ターゲット データベースにインポートします。
これには通常、CSV などのファイルベースの形式やデータベース固有のツールの使用が含まれます。これを実現する方法はデータベース エンジンによって異なる場合があるため、データベースのドキュメントを参照してください。
方法 4: リンク サーバー (SQL Server) を使用する
SQL Server では、リンク サーバーを使用してデータベース間でテーブルをコピーできます。
リンク サーバーを使用すると、リモート データベースへの接続を確立し、それらの間でデータのクエリや転送を行うことができます。
構文は次のとおりです。
に挿入 [ リンクサーバー名 】 。 [ データベース名 】 。 [ スキーマ名 】 。 [ ターゲットテーブル 】選択する * FROM source_table;
これにより、リモート サーバー間のリモート接続とデータ転送が可能になります。
結論
このチュートリアルでは、SQL でテーブルをコピーするさまざまな方法とテクニックの使用方法と作業方法を学びました。