MySQLでCREATE TABLE ASステートメントを使って2つのテーブルをUNION結合する方法
MySQLのCREATE TABLE ASステートメントで2つのテーブルをUNION結合する
複数のテーブルのデータをまとめた新しいテーブルを作成したい場合、UNIONを利用することで実現できます。この記事では、CREATE TABLE ... AS SELECTステートメントとUNIONを組み合わせて、2つのテーブルの結合結果を1つの新しいテーブルに格納する手順を、実際のSQL例とともに解説します。
1つ目のテーブルを作成する
まず、以下のコマンドで1つ目のテーブル「DemoTable1」を作成します。
mysql> create table DemoTable1(FirstName varchar(1000));
Query OK, 0 rows affected (1.22 sec)
次に、INSERTコマンドでレコードを挿入します。
mysql> insert into DemoTable1 values('John');
Query OK, 1 row affected (0.20 sec)SELECT文ですべてのレコードを確認してみましょう。
mysql> select *from DemoTable1;
実行結果は以下のとおりです。
+-----------+
| FirstName |
+-----------+
| John |
+-----------+
1 row in set (0.02 sec)
2つ目のテーブルを作成する
続いて、2つ目のテーブル「DemoTable2」を作成します。
mysql> create table DemoTable2(FirstName varchar(100));
Query OK, 0 rows affected (0.81 sec)
同様にレコードを挿入します。
mysql> insert into DemoTable2 values('Chris');
Query OK, 1 row affected (0.21 sec)SELECT文で内容を確認します。
mysql> select *from DemoTable2;
実行結果は以下のとおりです。
+-----------+
| FirstName |
+-----------+
| Chris |
+-----------+
1 row in set (0.00 sec)
CREATE TABLE ASとUNIONで結合テーブルを作成する
それでは本題のクエリです。CREATE TABLE ASステートメントを使い、2つのテーブルをUNION結合した結果を格納する新しいテーブル「DemoTable3」を作成します。各SELECT文にTABLE_NAMEというカラムを追加して、データがどのテーブル由来なのかを識別できるようにしているのがポイントです。
mysql> create table DemoTable3 AS
(
select FirstName, 'DemoTable1' AS `TABLE_NAME` from DemoTable1)
union
(
select FirstName, 'DemoTable2' AS `TABLE_NAME` from DemoTable2);
Query OK, 2 rows affected (1.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
作成したテーブルの内容を確認する
最後に、DemoTable3の全レコードを表示して確認します。
mysql> select *from DemoTable3;
実行結果は以下のとおりです。2つのテーブルのデータが1つのテーブルにまとめられていることがわかります。
+-----------+--------------+
| FirstName | TABLE_NAME |
+-----------+--------------+
| John | DemoTable1 |
| Chris | DemoTable2 |
+-----------+--------------+
2 rows in set (0.00 sec)
まとめ
CREATE TABLE ... AS SELECTとUNIONを組み合わせれば、複数のテーブルの結合結果を簡単に新しいテーブルとして保存できます。なお、通常のUNIONは重複行を自動的に除去するため、重複を含めてすべての行を取得したい場合はUNION ALLを使用してください。また、出典を示すカラムを追加しておくと、あとからデータの由来を判別できて便利です。
-
MySQLで日付(DATETIME型)を使った一時テーブルを作成する方法
MySQLで日付を扱う一時テーブルを作成するには、CREATE TEMPORARY TABLE文を使用します。一時テーブルはセッションが終了すると自動的に削除されるため、一時的なデータの保存や計算用途に非常に便利です。基本構文DATETIME型のカラムを持つ一時テーブルは、以下の構文で作成できます。CREATE TEMPORARY TABLE テーブル名( カラム名 DATETIME);実際に一時テーブルを作成してみようまず、「DueDate」というDATETIME型カラムを持つ一時テーブル「DemoTable」を作成します。mysql> C
-
MySQLでインデックス付きのテーブルを作成する方法を徹底解説
MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp