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

MySQLでUNIONを使って2つのテーブルを結合(マージ)する方法

MySQLでは、CREATE TABLE ... SELECT文とUNIONを組み合わせることで、2つのテーブルのデータを1つの新しいテーブルに結合(マージ)できます。この記事では、実際のサンプルコードとともに手順をわかりやすく解説します。

基本構文

2つのテーブルをUNIONでマージして新規テーブルを作成するには、以下の構文を使用します。

create table yourNewTableName
select * from yourFirstTableName
UNION
select * from yourSecondTableName;

サンプル:1つ目のテーブルを作成する

まず、マージ元となる最初のテーブルを作成しましょう。以下がそのクエリです。

mysql> create table FirstTable
    -> (
    -> Id int,
    -> PersonName varchar(20)
    -> );
Query OK, 0 rows affected (2.10 sec)

レコードを挿入する

次に、INSERTコマンドを使ってテーブルにレコードを追加します。

mysql> insert into FirstTable values(10,'Larry');
Query OK, 1 row affected (0.12 sec)

mysql> insert into FirstTable values(20,'David');
Query OK, 1 row affected (0.22 sec)

レコードを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from FirstTable;

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

+------+------------+
| Id   | PersonName |
+------+------------+
| 10   | Larry      |
| 20   | David      |
+------+------------+
2 rows in set (0.00 sec)

サンプル:2つ目のテーブルを作成する

続いて、2つ目のテーブルを作成します。カラム構成は1つ目のテーブルと同じにしておく必要があります。

mysql> create table SecondTable
    -> (
    -> Id int,
    -> PersonName varchar(20)
    -> );
Query OK, 0 rows affected (0.91 sec)

レコードを挿入する

こちらのテーブルにもINSERTコマンドでレコードを追加します。

mysql> insert into SecondTable values(30,'Chris');
Query OK, 1 row affected (0.17 sec)

mysql> insert into SecondTable values(40,'Robert');
Query OK, 1 row affected (0.15 sec)

レコードを確認する

SELECT文で内容を確認しましょう。

mysql> select * from SecondTable;

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

+------+------------+
| Id   | PersonName |
+------+------------+
| 30   | Chris      |
| 40   | Robert     |
+------+------------+
2 rows in set (0.00 sec)

UNIONで2つのテーブルをマージする

準備が整ったら、FirstTableSecondTableをUNIONで結合し、新しいテーブルを作成します。

mysql> create table MergeBothTableDemo
    -> select * from FirstTable
    -> UNION
    -> select * from SecondTable;
Query OK, 4 rows affected (0.86 sec)
Records: 4 Duplicates: 0 Warnings: 0

マージ結果を確認する

最後に、新しく作成したテーブルのレコードを確認してみましょう。以下がそのクエリです。

mysql> select * from MergeBothTableDemo;

実行結果は以下の通りです。両方のテーブルのデータが1つにまとまっていることがわかります。

+------+------------+
| Id   | PersonName |
+------+------------+
| 10   | Larry      |
| 20   | David      |
| 30   | Chris      |
| 40   | Robert     |
+------+------------+
4 rows in set (0.00 sec)

補足:UNIONとUNION ALLの違い

UNIONは重複する行を自動的に除外して結合します。一方、重複行もそのまま残したい場合はUNION ALLを使用します。大量のデータを扱う場合、重複チェックを行わないUNION ALLの方が処理速度が速いというメリットもあります。用途に応じて使い分けるとよいでしょう。

  1. JavaのPreparedStatementを使ってMySQLテーブルを更新する方法

    JavaからMySQLのテーブルを更新するには、PreparedStatementを使用するのが一般的で安全な方法です。PreparedStatementを使うことで、SQLインジェクションを防ぎつつ、パラメータを動的に設定できます。この記事では、実際にテーブルを作成し、Javaプログラムからレコードを更新するまでの一連の手順を解説します。1. テーブルの作成まず、MySQLで更新用のテーブルを作成しましょう。mysql> create table DemoTable( Id int, FirstName varchar(40) ); Query OK, 0 rows a

  2. MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

    MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks