UNION
他の記事もそうなんだけど、この記事は特に勉強中で自信がないので、内容が間違っている可能性大。 8-X
【環境】
MySQL:5.5.27
MySQL:5.5.27
MySQL:13.2.9.4 UNION Syntax
概要
クエリ結果が同一構成となる2つ以上のクエリ結果を合成する。
JOIN による結合と違って、リレーションしているわけではない。
単に2つ以上のクエリ結果を1つのテーブル上にする。
注意
- それぞれのクエリが同カラム数であること
- 各カラムが同じ順番に並んでいること
- 各カラムのデータ型が同一であること
- 場合によって、メイン SELECT の部分にも()が必要
- FROM 句サブクエリ内で利用する場合は、サブクエリ全体にエイリアスをつけること
基本
- SELECT id, name, created_at FROM table_a
- UNION SELECT id, name, modified_at FROM table_b
2つの SELECT がある。
カラム数は同じく 3。
カラム名は異なっていてもよい。→メインの SELECET 文のカラム名が返る。
重複
この項は勉強、実証ともに特に不十分
UNION は、そのまま使うと重複した行は無視されるらしい。
重複した行を拾いたいときは、下記のように ALL をつける。
- SELECT id, name, created_at FROM table_a
- UNION ALL SELECT id, name, modified_at FROM table_b
注文
こうして合成されたクエリ結果に ORDER BY, LIMIT などの注文を付けたい場合は、更にその後ろに続ける。
そして、SELECT 文を()で括る。
- ( SELECT id, name, created_at FROM table_a )
- UNION ( SELECT id, name, modified_at FROM table_b )
- ORDER BY id
FROM 句
FROM 句にて UNION を利用するときは、エイリアスを付ける。
- SELECT id, name, created_at
- FROM (
- SELECT id, name, created_at FROM table_a
- UNION SELECT id, name, modified_at FROM table_b
- ) as sub
このとき、UNION SELECT 文にエイリアスを付けてしまわないように注意。
あくまでも FROM 句全体 に()を付ける。
これはサブクエリのルールだから当然か~。
サブクエリ