【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でした。
コメント