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

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で設定することをおすすめします。

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

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

  2. 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)