6.UNION-SQL経験者のためのR入門

SQLの UNION 演算子について解説します。


🔗 UNION 演算子による結果セットの統合

SELECT FIELD1 FROM TABLE1 
UNION 
SELECT FIELD1 FROM TABLE2

のような UNION 演算子は、複数の SELECT クエリの結果セットを縦方向に結合し、さらに重複する行を自動的に削除するために使用されます。

1. 動作の仕組み

UNION 演算子は、以下の処理を自動的に行います。

  1. 結果セットの結合: 最初の SELECT クエリ(TABLE1 からのデータ)と二番目の SELECT クエリ(TABLE2 からのデータ)の結果を一つの大きな結果セットとして結合します。
  2. 重複の排除: 結合された結果セット全体をスキャンし、完全に重複している行をすべて取り除き、ユニークな行だけを最終的な結果として返します。

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 と完全に一致します。