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

【MySQL】UNIONを使って1つのクエリで2つのテーブルからSELECTする方法

2つのテーブルからまとめてデータを取得したい場合は、UNION演算子を使用します。この記事では、実際にテーブルを作成し、UNIONを使って2つのテーブルを1回のクエリで結合してSELECTする手順を解説します。

1つ目のテーブル(DemoTable1)を作成する

まず、以下のCREATE TABLE文でサンプル用のテーブルを作成します。

mysql> create table DemoTable1
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
);
Query OK, 0 rows affected (0.90 sec)

レコードを挿入する

次に、INSERT文を使ってテーブルにいくつかのレコードを追加します。

mysql> insert into DemoTable1(FirstName) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1(FirstName) values('Adam');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1(FirstName) values('Sam');
Query OK, 1 row affected (0.16 sec)

登録内容を確認する

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

mysql> select *from DemoTable1;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | Adam      |
|  3 | Sam       |
+----+-----------+
3 rows in set (0.00 sec)

2つ目のテーブル(DemoTable2)を作成する

続いて、2つ目のテーブルを作成します。

mysql> create table DemoTable2(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
);
Query OK, 0 rows affected (1.75 sec)

レコードを挿入する

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

mysql> insert into DemoTable2(FirstName) values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable2(FirstName) values('Tom');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable2(FirstName) values('Bob');
Query OK, 1 row affected (0.50 sec)

登録内容を確認する

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

mysql> select *from DemoTable2;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | John      |
|  2 | Tom       |
|  3 | Bob       |
+----+-----------+
3 rows in set (0.00 sec)

UNIONで2つのテーブルを1回のクエリで結合する

それが本題のUNIONを使ったクエリです。DemoTable1とDemoTable2の両方の結果を1つの結果セットとして取得し、さらにORDER BY句でFirstName順に並べ替えています。

mysql> (select *from DemoTable1)
    union
    (select *from DemoTable2)
    order by FirstName;

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

+----+-----------+
| Id | FirstName |
+----+-----------+
|  2 | Adam      |
|  3 | Bob       |
|  1 | Chris     |
|  1 | John      |
|  3 | Sam       |
|  2 | Tom       |
+----+-----------+
6 rows in set (0.00 sec)

まとめ

このように、UNION演算子を使うことで、複数のテーブルに対するSELECT結果を1つのクエリで結合できます。各SELECT文のカラム数とデータ型を揃えることが前提条件となるため、構造が似たテーブル同士をまとめて集計・表示したい場合に特に便利です。なお、重複行もすべて取得したい場合は、UNION ALLを使用すると良いでしょう。

  1. MySQLの1つのUPDATE文で2つの列を同時に更新する方法

    はじめにMySQLでは、1つのUPDATE文の中でSET句を一度だけ使えば、複数の列を同時に更新できます。各列の指定はカンマ(,)で区切って記述します。この記事では、実際にテーブルを作成し、1つのクエリで2つの列(FirstNameとLastName)を更新する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1909 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20)

  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)