UNION ALLとは
クエリの結果を一緒にするために使う。
具体例
データ
こういうデータがあったとする。
+----+------+------+------+
| id | x | y | z |
+----+------+------+------+
| 1 | 1 | 2 | 3 |
| 2 | 5 | 5 | 2 |
| 3 | 4 | 7 | 1 |
| 4 | 3 | 3 | 8 |
+----+------+------+------+
SQL発行
idと(x,y,z)カラムをtablesテーブルからSELECTする。
SELECT id, x AS value FROM tables
UNION ALL
SELECT id, y AS value FROM tables
UNION ALL
SELECT id, z AS value FROM tables
クエリ結果
3つのSELECTの結果がくっついてることがわかる。
+----+------+
| id | col |
+----+------+
| 1 | 1 |
| 2 | 5 |
| 3 | 4 |
| 4 | 3 |
| 1 | 2 |
| 2 | 5 |
| 3 | 7 |
| 4 | 3 |
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
| 4 | 8 |
+----+------+
周辺
UNIONとUNION ALLの違い
挙動
UNIONは重複しているものが削除されます。
以下、UNIONで発行した結果ですが、(id, col)の組み合わせで重複しているものが排除されています。
+----+------+
| id | col |
+----+------+
| 1 | 1 |
| 2 | 5 |
| 3 | 4 |
| 4 | 3 |
| 1 | 2 |
| 3 | 7 |
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
| 4 | 8 |
+----+------+
パフォーマンス
ユニークである挙動を持っているため、UNIONの方が重いらしいです。
注意点
上の例だと、x,y,zはいずれも整数型であり揃ってますね
同じテーブルの似たようなカラムなので条件は満たしていそうです。
なお、型に関しては暗黙的に変換できるものなら大丈夫だそう。