MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

CREATE TABLE文を個別に実行せず、SELECTステートメントだけでMySQLの一時テーブルを作成する方法

SELECTステートメントから一時テーブルを作成するには

SELECTステートメントを使って一時テーブル(Temporary Table)を作成するには、TEMPORARYキーワードを使用します。これにより、別途CREATE TABLE文を実行することなく、既存テーブルのデータをそのままコピーした一時テーブルを簡単に生成できます。

この一時テーブルには次のような特徴があります。

  • 作成されたセッション内でのみ参照可能
  • セッションが閉じられると自動的に破棄される
  • 異なる2つのセッションが同じ名前の一時テーブルをそれぞれ持つことができる

準備:元となるテーブルを作成する

まず、サンプル用の通常テーブルを作成します。

mysql> create table MyTableDemo
    -> (
    -> id int,
    -> Name varchar(100)
    -> );
Query OK, 0 rows affected (0.69 sec)

レコードを挿入する

続けて、いくつかのレコードを挿入します。

mysql> insert into MyTableDemo values(1,'John');
Query OK, 1 row affected (0.18 sec)

mysql> insert into MyTableDemo values(2,'Carol');
Query OK, 1 row affected (0.13 sec)

mysql> insert into MyTableDemo values(3,'Bob');
Query OK, 1 row affected (0.12 sec)

登録済みレコードの確認

すべてのレコードを表示して、正しく挿入されているか確認しましょう。

mysql> select * from MyTableDemo;

実行結果は以下の通りです。

+------+-------+
| id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Carol |
|    3 | Bob   |
+------+-------+
3 rows in set (0.00 sec)

一時テーブルを作成する構文

一時テーブルを作成するための基本構文は次のとおりです。

CREATE TEMPORARY TABLE IF NOT EXISTS 作成する一時テーブル名 AS (SELECT * FROM コピー元テーブル名);

IF NOT EXISTSを指定することで、同名の一時テーブルがすでに存在している場合でもエラーを回避できます。

実際に一時テーブルを作成してみる

それでは、上記の構文を実際のクエリで実行してみましょう。

mysql> CREATE TEMPORARY TABLE IF NOT EXISTS MyTemporaryTableDemo AS (SELECT * FROM MyTableDemo);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

「Records: 3」と表示されていることから、3件のレコードが一時テーブルへ正常にコピーされたことがわかります。

コピー結果の確認

一時テーブルの中身をSELECT文で確認します。

mysql> select * from MyTemporaryTableDemo;

実行結果は以下の通りです。元テーブルの全レコードがコピーされています。

+------+-------+
| id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Carol |
|    3 | Bob   |
+------+-------+
3 rows in set (0.00 sec)

まとめ

CREATE TEMPORARY TABLE ... AS SELECT ...を活用すれば、複雑なクエリ結果を一時的に保存し、その後の処理で再利用することができます。セッション終了時に自動的に削除されるため、後片付けの手間も不要です。中間集計やデータ加工などの一時的な作業にぜひ活用してください。

  1. MySQLでインデックス付きのテーブルを作成する方法を徹底解説

    MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp

  2. MySQLのUPDATE文の中でSELECTステートメントを使う方法

    MySQLでUPDATEコマンドを実行する際に、同じテーブルを参照するSELECTステートメントを組み合わせたいケースはよくあります。しかし、UPDATE文の中で直接サブクエリとして対象テーブルを指定するとエラーになるため、工夫が必要です。解決策:サブクエリとWHERE句を組み合わせるこの問題を回避するには、WHERE句とともにサブクエリを使用し、さらにそのサブクエリを別のSELECT文でラップ(派生テーブル化)します。これにより、MySQLは一時的なテーブルとして扱うため、更新中のテーブルへの参照エラーを防ぐことができます。実際の手順を順番に見ていきましょう。1. テーブルを作成するまず、サ