UNION と UNION ALL の違いをご説明します。
UNION ALL は、名の通り、UNION の 兄弟みたいなものです。
なので、まずは、UNIONの話をします。
UNION とは
2つのSQLの実行結果を縦方向に合体(連結)させる機能。
具体的には、こんな感じです。
- 1個目のSQLの実行結果
test_pk | test_val |
---|---|
1 | a |
2 | b |
- 2個目のSQLの実行結果
test_pk | test_val |
---|---|
2 | b |
10 | a2 |
11 | b2 |
13 | c2 |
- UNIONで合体(連結)させた実行結果
test_pk | test_val |
---|---|
1 | a |
2 | b |
10 | a2 |
11 | b2 |
13 | c2 |
- UNIONを使ったSQL
select test_pk, test_val from test1
union
select test_pk, test_val from test2
2つのSQLの実行結果を縦方向に合体(連結)させる機能です。
特異機能
合体(連結)させるときに、あることをやっています。
それは、「重複の削除」。
1個目と2個目の実行結果で、同じ行(重複行)は、省いて表示します。
例で言いますと、以下が1個目と2個目で、重複しています。
- 1個目と2個目のSQLで重複している行
test_pk | test_val |
---|---|
2 | b |
重複なしであれば、2行表示されますが、重複を削除しているので、1行で表示されます。
注意点
- 2つのSQLの項目(test_pk, test_val)の「数」、「型」が、一致しないとNG。
UNION ALL とは
UNION の特殊機能(重複の削除)を止めた機能です。
- UNION ALLで合体させた実行結果
test_pk | test_val |
---|---|
1 | a |
2 | b |
2 | b |
10 | a2 |
11 | b2 |
13 | c2 |
- UNION ALLを使ったSQL
select test_pk, test_val from test1
union all
select test_pk, test_val from test2
以下が1個目と2個目のSQLで、重複していますが、UNION ALLの実行結果も重複しています。
- 1個目と2個目のSQLで重複している行
test_pk | test_val |
---|---|
2 | b |
- UNION ALLで合体(連結)させた実行結果
test_pk | test_val |
---|---|
1 | a |
2 | b |
2 | b |
10 | a2 |
11 | b2 |
13 | c2 |
個人的な使いどころ
UNION ALLは、調査でデータを抽出したいときに、良く使います。
2つのSQLを2回実行して、Excelでソートするという手もあるのですが、
1回で実行して、ついでに並び替えしたいとか。
そういうときによく使います。
UNIONは、正直使う機会がありませんでした。
調査で使うので、重複している行も確認したいことが多かったので。