【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を使用すると良いでしょう。
-
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)
-
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)