SQLの INTERSECT 演算子について解説します。
✂️ INTERSECT 演算子による共通部分の抽出
SELECT FIELD1 FROM TABLE1
INTERSECT
SELECT FIELD1 FROM TABLE2
のような INTERSECT 演算子は、複数の SELECT クエリの結果セットの共通部分(両方のクエリ結果に存在する行)を抽出するために使用されます。
1. 動作の仕組み
INTERSECT 演算子は、以下の処理を行います。
- 結果セットの比較: 最初の
SELECTクエリ(TABLE1からのデータ)と二番目のSELECTクエリ(TABLE2からのデータ)の結果を比較します。 - 共通部分の抽出と重複の排除: 両方の結果セットに完全に存在する行のみを抽出します。この際、
UNIONと同様に、結果は自動的にユニークな行(重複を排除したもの)になります。
2. 利用条件(ルール)
INTERSECT を使用するためには、結合するすべての SELECT クエリが、UNION や UNION 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)
この操作により、TABLE1 と TABLE2 の両方に存在する FIELD1 の値だけが抽出された結果が得られます。