【Oracle】INTERSECT で重複を取得する【SQL】

【SQL】INTERSECT 複数のSELECT結果の重複を取得する(積集合)

積集合

Oracleでは「INTERSECT」を使用して複数のSELECT結果の重複(積集合)を取得することができます。

例えば、テーブル1とテーブル2の両方に重複しているレコードを検索したいときにINTERSECTを使用します。

INTERSECTはいわゆる積集合です。重複レコードの抽出です。

INTERSECT

  • 複数のSELECT結果の重複レコードを取得する

サンプルデータ

--野球部のメンバーを取得する
SELECT stuno,stuname FROM act_baseball;

<act_baseballテーブル>

stuno stuname
15 佐藤太郎
20 山田一郎
44 田中花子

 

--サッカー部のメンバーを取得する
SELECT stuno,stuname FROM act_soccer;

<act_soccerテーブル>

stuno stuname
8 伊藤一
10 加藤和也
44 田中花子

 

例1. INTERSECTで2つのテーブルの重複を検索するパターン

--野球部とサッカー部の両方に所属しているメンバーを取得する
SELECT stuno,stuname FROM act_baseball
INTERSECT
SELECT stuno,stuname FROM act_soccer
order by 1;
stuno stuname
44 田中花子

Oracleでは「INTERSECT」を使用することで別テーブル同士のSELECT結果の重複レコードを取得することができます。上記の例では、「野球部とサッカー部の両方に所属しているメンバー」を取得しました。

テーブルは2つだけでなく、INTERSECTで3つ・4つ以上のテーブルの重複レコードを取得できます。

INTERSECTの注意点

注意点としては、SELECTの列は同じ数でないといけません。上記の例では「stuno」「stuname」の2列をSELECTしています。よってINTERSECTするテーブルはすべて2列にする必要があります。

以上、Oracleで複数のSELECT結果の重複を取得する(積集合)するINTERSECTでした。

コメント