[SQL] 2つのテーブルを結合ではなく、行で繋げるUNION記述

SQL
データを取得するテーブルが2つある場合、検索すると、ほとんどが、JOINが書かれています。 でも、JOINは、テーブルをLEFTまたは、RIGHTという風に、横に繋げる手法です。 今回は、縦に繋ぎたくて、1日ほど悩んがあげく、UNIONを使えば良いという事がわかったので、備忘録しておきます。

やりたいこと

JOINは、横結合なので、つなぎ合わせるid値などを連結させて、1つのレコードとして組み合わせにする機能です。 JOINが分からない人のために、サンプルを用意しました。 名刺管理票のようなものを想像してください。

名前

ID User
1 田中
2 鈴木
3 内藤

会社名

ID User-ID Company
1 1 株式会社A
2 2 合同会社B
3 3 NPO社C

結合後

ID User Company
1 田中 株式会社A
2 鈴木 合同会社B
3 内藤 NPO社C

SQL文

SELECT * FROM User LEFT JOIN Company ON User.id = Company = User.id 違う違う、そうじゃなく、次のようなテーブル構造を縦に並べます。

名前-1テーブル : User_1

ID User
1 田中
2 鈴木
3 内藤

名前-2テーブル : User_2

ID User
4 吉田
5 上田
6 加藤

縦結合

ID User
1 田中
2 鈴木
3 内藤
4 吉田
5 上田
6 加藤
わかりました? 縦結合ですよ。

UNION結合

SELECT * FROM ( SELECT * FROM User_1 UNION ( SELECT * FROM User_2 ) as User FROM句の箇所にテーブル名ではなく、サブクエリと呼ばれる、内包するSELECT文を書くことで結合させることができます。 あと、繋ぎあわあせたいテーブルの数だけUNIONを繋げればいいんですね。 UNION句の後に、as 出力名を付けるのを忘れないようにしてくださいね。(asは省略できます)