SQLの UNION 演算子について解説します。
🔗 UNION 演算子による結果セットの統合
SELECT FIELD1 FROM TABLE1
UNION
SELECT FIELD1 FROM TABLE2
のような UNION 演算子は、複数の SELECT クエリの結果セットを縦方向に結合し、さらに重複する行を自動的に削除するために使用されます。
1. 動作の仕組み
UNION 演算子は、以下の処理を自動的に行います。
- 結果セットの結合: 最初の
SELECTクエリ(TABLE1からのデータ)と二番目のSELECTクエリ(TABLE2からのデータ)の結果を一つの大きな結果セットとして結合します。 - 重複の排除: 結合された結果セット全体をスキャンし、完全に重複している行をすべて取り除き、ユニークな行だけを最終的な結果として返します。
2. UNIONの利用条件(ルール)
UNION を正しく使用するためには、結合するすべての SELECT クエリが以下の厳格なルールを満たす必要があります。
- 列の数: すべての
SELECTクエリで、選択する列の数が完全に一致していなければなりません。 - 列の順序: すべての
SELECTクエリで、対応する列の並び順が一致していなければなりません。 - データ型: 対応する列のデータ型が互換性を持っている必要があります(例: 一方が
INTであれば、もう一方もINTまたは互換性のある数値型であること)。
💡 注意点: 最終的な結果の列名は、通常、最初の
SELECTクエリで指定された列名が使用されます。
3. R言語 (dplyr) での対応方法
R言語では、dplyr パッケージの union() 関数が、SQLの UNION 演算子と完全に同じ機能を提供します。
🚀 Rコードの対応
R
# SQL: SELECT FIELD1 FROM TABLE1 UNION SELECT FIELD1 FROM TABLE2
# R言語:
library(dplyr)
# 1. 結合前に、両方のデータフレームでFIELD1だけを選択する
table1_data <- TABLE1 %>% select(FIELD1)
table2_data <- TABLE2 %>% select(FIELD1)
# 2. UNION (結合と重複排除) を実行
union(table1_data, table2_data)
4. UNION ALL との違い(参考)
SQLには UNION ALL 演算子もありますが、これは UNION と以下の点で異なります。
| 演算子 | 動作 | R言語の対応 |
UNION | 結合後、重複行を削除する | union() |
UNION ALL | 結合するが、重複行はそのまま残す | bind_rows() |
したがって、Rで union() を使う場合、その機能は結合と重複排除の両方を含む、SQLの UNION と完全に一致します。