8.INTERSECT-SQL経験者のためのR入門

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


✂️ INTERSECT 演算子による共通部分の抽出

SELECT FIELD1 FROM TABLE1 
INTERSECT 
SELECT FIELD1 FROM TABLE2 

のような INTERSECT 演算子は、複数の SELECT クエリの結果セットの共通部分(両方のクエリ結果に存在する行)を抽出するために使用されます。

1. 動作の仕組み

INTERSECT 演算子は、以下の処理を行います。

  1. 結果セットの比較: 最初の SELECT クエリ(TABLE1 からのデータ)と二番目の SELECT クエリ(TABLE2 からのデータ)の結果を比較します。
  2. 共通部分の抽出と重複の排除: 両方の結果セットに完全に存在する行のみを抽出します。この際、UNION と同様に、結果は自動的にユニークな行(重複を排除したもの)になります。

2. 利用条件(ルール)

INTERSECT を使用するためには、結合するすべての SELECT クエリが、UNIONUNION ALL と同じ厳格なルールを満たす必要があります。

  • 列の数、順序、データ型: すべての SELECT クエリで、選択する列の数、並び順、およびデータ型が互換性を持っている必要があります。

3. 利用シーン

INTERSECT は、「AのリストにもBのリストにも入っている項目」を知りたい場合に非常に有効です。

  • 例: 「過去 30 日間に購入履歴があり、かつ、過去 30 日間にウェブサイトにログインしたことがある顧客リスト」の抽出。

4. R言語 (dplyr) での対応方法

R言語では、dplyr パッケージの intersect() 関数が、SQLの INTERSECT 演算子と完全に同じ機能を提供します。

🚀 Rコードの対応

R

# SQL: SELECT FIELD1 FROM TABLE1 INTERSECT SELECT FIELD1 FROM TABLE2

# R言語:
library(dplyr)

# 1. 結合前に、両方のデータフレームでFIELD1だけを選択する
table1_data <- TABLE1 %>% select(FIELD1)
table2_data <- TABLE2 %>% select(FIELD1)

# 2. INTERSECT (共通部分の抽出) を実行
intersect(table1_data, table2_data)

この操作により、TABLE1TABLE2 の両方に存在する FIELD1 の値だけが抽出された結果が得られます。