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

複数テーブルのデータを組み合わせてMySQLビューを作成する方法(UNION演算子の活用)

MySQLでは、UNION演算子を使うことで、2つ以上のSELECT文の結果セットを1つに結合できます。この特性を利用すれば、複数のテーブルから取得したデータをまとめたビュー(VIEW)を簡単に作成できます。

ここでは、以下のような2つの基本テーブル「Student_info」と「Student_detail」を例に説明します。

サンプルテーブル:Student_info

mysql> Select * from Student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
| 132  | Shyam   | Chandigarh | Economics  |
| 133  | Mohan   | Delhi      | Computers  |
+------+---------+------------+------------+
6 rows in set (0.00 sec)

サンプルテーブル:Student_detail

mysql> Select * from Student_detail;
+-----------+-------------+------------+
| Studentid | StudentName | address    |
+-----------+-------------+------------+
|       100 | Gaurav      | Delhi      |
|       101 | Raman       | Shimla     |
|       103 | Rahul       | Jaipur     |
|       104 | Ram         | Chandigarh |
|       105 | Mohan       | Chandigarh |
+-----------+-------------+------------+
5 rows in set (0.00 sec)

UNIONを使ったビューの作成例

次のクエリでは、上記の2つのテーブルから氏名データを抽出し、それらを結合して1つのビュー「Info」を作成しています。

mysql> Create or Replace View Info AS
Select StudentName from Student_detail
UNION
Select Name From Student_info;
Query OK, 0 rows affected (0.10 sec)

mysql> select * from info;
+-------------+
| StudentName |
+-------------+
| Gaurav      |
| Raman       |
| Rahul       |
| Ram         |
| Mohan       |
| YashPal     |
| Shyam       |
+-------------+
7 rows in set (0.00 sec)

この結果セットには、両方のテーブルの値が統合されています。通常のUNIONは重複する値を自動的に排除する点に注目してください。たとえば「Gaurav」「Raman」「Ram」「Mohan」は両方のテーブルに存在していましたが、結果にはそれぞれ1回だけ表示されています。

重複も含めてすべての行を取得したい場合:UNION ALL

重複データも含めてすべての行を保持したい場合は、UNION ALLを使用します。以下のクエリでは、重複を排除せずに全件をビューに格納しています。

mysql> Create or Replace View Info AS
Select StudentName from Student_detail
UNION ALL
Select Name From Student_info;
Query OK, 0 rows affected (0.16 sec)

mysql> select * from info;
+-------------+
| StudentName |
+-------------+
| Gaurav      |
| Raman       |
| Rahul       |
| Ram         |
| Mohan       |
| YashPal     |
| Gaurav      |
| Raman       |
| Ram         |
| Shyam       |
| Mohan       |
+-------------+
11 rows in set (0.00 sec)

このようにUNION ALLを使うと、両テーブルの合計11行がすべてビューに格納され、「Gaurav」「Raman」「Ram」「Mohan」といった重複する名前もそのまま表示されます。

まとめ

  • UNION演算子を使うことで、複数テーブルのSELECT結果を組み合わせたビューを作成できます。
  • 通常のUNIONは重複行を自動的に削除します。
  • 重複も残したい場合はUNION ALLを使います。なお、UNION ALLは重複チェック処理がない分、一般的にパフォーマンス面で有利です。
  1. MySQLでビュー(VIEW)を作成する方法|CREATE VIEWの基本構文と実行例を解説

    MySQLのビュー(VIEW)とは?ビュー(VIEW)とは、SQLクエリの結果セットをもとに定義される「仮想テーブル」のことです。実際のデータを物理的に保存するわけではなく、元のテーブルへの参照情報のみを保持します。そのため、複雑なクエリをシンプルな名前で呼び出せるようにしたり、ユーザーに見せたい列や行だけを限定して提供したりする際に非常に便利です。MySQLでビューを作成するには、CREATE VIEW文を使用します。ビュー作成の基本構文ビューを作成するための基本構文は以下の通りです。create view yourViewName as select * from yourTableNam

  2. PythonとMySQLで条件に合うデータを抽出する方法:WHERE句の使い方を徹底解説

    テーブルからすべてのデータを取得する必要があるケースは、実はそれほど多くありません。むしろ、何らかの条件や基準に基づいて、特定のデータや行だけを取り出したいという場面の方が多いでしょう。例えば、多くの生徒の名前と点数が登録されたテーブルがあるとします。ここから「点数が90以上の生徒の名前だけを取得したい」という場合、(点数>=90)という条件に基づいてデータを選択する必要があります。このような条件付きのデータ抽出を実現するために、MySQLでは「WHERE」句が用意されています。WHERE句を使えば、指定した条件を満たすデータだけをテーブルから選択できます。基本構文SELECT * FR