SQLのINTERSECT演算子で2つのテーブルの一致した行を抽出するサンプルです。
目次
| 説明 | INTERSECT演算子(2つのテーブルの一致した行を抽出する) |
| サンプル | INTERSECTを使用したサンプル |
| 比較するテーブルの値が異なっていた場合 |
INTERSECT演算子(2つのテーブルの一致した行を抽出する)
| select * from テーブルA INTERSECT select * from テーブルB |
- テーブルAで取得した行とテーブルBで取得した行を全ての列の値で比較し、列の値がすべて一致する行を抽出します。
→2つのテーブルの列数が同じであることが必要です。列名は異なっていても実行できます。 - 集合演算子で、積集合を求めます。
- intersectは、交差するという意味です。
- 以下は、Oracleの集合演算子のリンクです。
https://docs.oracle.com/cd/E16338_01/server.112/b56299/queries004.htm
INTERSECTを使用したサンプル
INTERSECT演算子で2つのテーブルを比較し、一致した行を表示するサンプルです。
以下、2つのテーブルがあるとします。
| id | name | romaji |
|---|---|---|
| 1 | 鈴木 | suzuki |
| 2 | 田中 | tanaka |
| 3 | 佐藤 | sato |
| id | name | romaji |
|---|---|---|
| 2 | 田中 | tanaka |
| 4 | 高橋 | takahashi |
INTERSECTを使用したSQLを実行します。
select * from employee
INTERSECT
select * from employee_before
結果は、以下のとおりです。
| id | name | romaji |
|---|---|---|
| 2 | 田中 | tanaka |
employeeテーブルとemployee_beforeテーブルで一致した行が表示されます。
比較するテーブルの値が異なっていた場合
比較するテーブルの値が異なっていた場合は、一致した行として抽出されません。
以下、2つのテーブルがあるとします。
| id | name | romaji |
|---|---|---|
| 1 | 鈴木 | suzuki |
| 2 | 田中 | NULL |
| 3 | 佐藤 | sato |
2行目は、列のromajiの値がnullです。
| id | name | romaji |
|---|---|---|
| 2 | 田中 | tanaka |
| 4 | 高橋 | takahashi |
INTERSECTを使用したSQLを実行します。
select * from employee
INTERSECT
select * from employee_before
結果は、以下のとおりです。
| id | name | romaji |
|---|---|---|
employeeテーブルとemployee_beforeテーブルの2行目のデータは一致とみなされないので抽出結果はありません。
関連の記事
SQL UNIONとUNION ALLのサンプル(結合して抽出)
SQL MINUSのサンプル(差分を抽出する:Oracle)
