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

MySQLで2つのテーブルを条件付きで連結する方法(UNION ALLの使い方)

MySQLで2つのテーブルを連結するには、UNION ALLを使用します。ここでは、実際にサンプルテーブルを作成しながら、条件を指定して2つのテーブルを連結する手順を解説します。

1. 1つ目のテーブルを作成する

まず、以下のコマンドでテーブル「DemoTable1」を作成します。

mysql> create table DemoTable1
   (
   Id int,
   FirstName varchar(20)
   );
Query OK, 0 rows affected (1.52 sec)

続いて、insertコマンドを使ってレコードを挿入します。

mysql> insert into DemoTable1 values(10,'John');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable1 values(20,'Carol');
Query OK, 1 row affected (0.28 sec)

select文で、テーブル内のすべてのレコードを確認してみましょう。

mysql> select *from DemoTable1;

出力結果

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 10   | John      |
| 20   | Carol     |
+------+-----------+
2 rows in set (0.00 sec)

2. 2つ目のテーブルを作成する

同じ構造で、2つ目のテーブル「DemoTable2」を作成します。

mysql> create table DemoTable2
   (
   Id int,
   FirstName varchar(20)
   );
Query OK, 0 rows affected (1.22 sec)

こちらにもinsertコマンドでレコードを挿入します。

mysql> insert into DemoTable2 values(20,'David');
Query OK, 1 row affected (1.28 sec)
mysql> insert into DemoTable2 values(40,'Chris');
Query OK, 1 row affected (0.38 sec)

select文で内容を確認します。

mysql> select *from DemoTable2;

出力結果

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 20   | David     |
| 40   | Chris     |
+------+-----------+
2 rows in set (0.00 sec)

3. 条件を指定して2つのテーブルを連結する

それでは本題です。以下のようにWHERE句で条件を指定し、UNION ALLを使うことで、両方のテーブルから条件に一致するレコードを連結して取得できます。

mysql> select *from DemoTable1 where Id=20
   union all select *from DemoTable2 where Id=20;

出力結果

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 20   | Carol     |
| 20   | David     |
+------+-----------+
2 rows in set (0.43 sec)

このように、「Id=20」という条件に一致したDemoTable1の「Carol」とDemoTable2の「David」の2件が、1つの結果セットとして連結されて表示されます。

補足:UNIONとUNION ALLの違い

UNION ALLは重複行もそのまますべて返しますが、UNIONを使うと重複している行が自動的に削除されます。パフォーマンスの面ではUNION ALLの方が高速なので、重複を気にしない場合はUNION ALLの使用が推奨されます。用途に応じて使い分けるとよいでしょう。

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

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

  2. MySQLのCONCAT_WS()関数で文字列を連結しながら条件に一致する行を抽出する方法

    MySQLのCONCAT_WS()関数とはMySQLでは、CONCAT_WS()関数を使用することで、複数のカラムや値を指定した区切り文字で連結できます。さらにWHERE句と組み合わせれば、条件に一致する行だけを抽出しながら、読みやすい形式の文字列として出力することも可能です。この記事では、実際にテーブルを作成し、CONCAT_WS()と条件指定を組み合わせたクエリの実行例を順番に解説します。サンプルテーブルの作成まず、ユーザー情報を格納するテーブル「demo38」を作成しましょう。mysql> create table demo38-> (-> user_id int,-&