MySQLのUNIONを使って2つのテーブルを結合し、新しいテーブルを作成する方法
MySQLのUNIONで2つのテーブルをマージする基本構文
MySQLでは、UNION演算子とCREATE TABLE文を組み合わせることで、既存の2つのテーブルを結合した新しいテーブルを簡単に作成できます。基本となる構文は以下の通りです。
create table yourTableName ( select *from yourTableName1 ) UNION ( select *from yourTableName2 );
この構文では、1つ目のテーブルから全レコードを選択し、2つ目のテーブルの全レコードとUNIONで結合した結果を、そのまま新規テーブルとして作成します。
サンプルテーブルの作成
まず、動作を確認するために最初のテーブルを作成します。以下がそのクエリです。
mysql> create table Old_TableDemo -> ( -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> UserName varchar(20) -> ); Query OK, 0 rows affected (0.63 sec)
続いて、2つ目のテーブルを作成します。
mysql> create table Old_TableDemo2 -> ( -> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> UserName varchar(20) -> ); Query OK, 0 rows affected (0.60 sec)
最初のテーブルにデータを挿入する
INSERTコマンドを使って、最初のテーブルにいくつかのレコードを挿入します。
mysql> insert into Old_TableDemo(UserName) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into Old_TableDemo(UserName) values('Carol');
Query OK, 1 row affected (0.15 sec)SELECT文で最初のテーブルの全レコードを表示してみましょう。
mysql> select *from Old_TableDemo;
実行結果は以下の通りです。
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Carol | +--------+----------+ 2 rows in set (0.00 sec)
2つ目のテーブルにデータを挿入する
同様に、2つ目のテーブルにもINSERTコマンドでレコードを追加します。
mysql> insert into Old_TableDemo2(UserName) values('Larry');
Query OK, 1 row affected (0.22 sec)
mysql> insert into Old_TableDemo2(UserName) values('Sam');
Query OK, 1 row affected (0.10 sec)SELECT文で2つ目のテーブルの全レコードを確認します。
mysql> select *from Old_TableDemo2;
実行結果は以下の通りです。
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | Larry | | 2 | Sam | +--------+----------+ 2 rows in set (0.00 sec)
UNIONで2つのテーブルを結合して新規テーブルを作成する
それでは、UNIONを使って2つのテーブルをマージした新しいテーブルを作成するクエリを実行します。
mysql> create table UserTableDemo -> ( -> select *from Old_TableDemo -> ) -> UNION -> ( -> select *from Old_TableDemo2 -> ); Query OK, 4 rows affected (1.18 sec) Records: 4 Duplicates: 0 Warnings: 0
最後に、新しく作成されたテーブルの内容をSELECT文で確認しましょう。
mysql> select *from UserTableDemo;
実行結果は以下の通りです。
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Carol | | 1 | Larry | | 2 | Sam | +--------+----------+ 4 rows in set (0.00 sec)
知っておきたい注意点
UNIONは重複する行を自動的に除外します。重複も含めてすべてのレコードを結合したい場合は、代わりにUNION ALLを使用してください。また、CREATE TABLE ... SELECT構文で作成したテーブルには、元のテーブルのAUTO_INCREMENT属性やインデックス、PRIMARY KEY制約などは引き継がれないため、必要に応じて後からALTER TABLEで設定することをおすすめします。
-
MySQLでインデックス付きのテーブルを作成する方法を徹底解説
MySQLでは、テーブル作成後にCREATE INDEX文を使うことで、特定のカラムに対してインデックスを追加できます。検索速度の向上やデータ整合性の確保において、インデックスは非常に重要な役割を果たします。この記事では、基本的な構文から実際の実行例まで、順を追ってわかりやすく解説します。インデックス付きテーブルを作成する基本構文まずテーブルを作成し、その後CREATE INDEX文でインデックスを追加します。基本の構文は以下のとおりです。create table yourTableName ( yourColumnName1 dataType, yourColumnName2 dataTyp
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)