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つのテーブルをマージする
準備が整ったら、FirstTableとSecondTableを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の方が処理速度が速いというメリットもあります。用途に応じて使い分けるとよいでしょう。
-
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
-
MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法
MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks