SQL MINUSのサンプル(差分を抽出する:Oracle)

SQLのMINUS演算子で差分を抽出するサンプルです。

確認環境
・Oracle Express Edition 11g Release 2

目次

説明 MINUS演算子(2つのテーブルの行の差分を抽出する)
サンプル MINUSを使用したサンプル
  比較するテーブルの値が異なっていた場合
  比較する項目がnullどうしの場合

MINUS演算子(2つのテーブルの行の差分を抽出する)

select * from テーブルA
MINUS
select * from テーブルB
  • テーブルAで取得した行とテーブルBで取得した行を全ての列の値で比較し、列の値がすべて一致する行は抽出しません。
    →テーブルAのみにある行を抽出します。
    →2つのテーブルの列数が同じであることが必要です。列名は異なっていても実行できます。
  • 集合演算子で、差集合を求めます。
  • データベースによって「MINUS」演算子はサポートしていません。Oracleでは実行できます。
  • 以下は、Oracleの集合演算子のリンクです。
    https://docs.oracle.com/cd/E16338_01/server.112/b56299/queries004.htm

MINUSを使用したサンプル

MINUS演算子で2つのテーブルを比較し、差がある行を表示するサンプルです。

以下、2つのテーブルがあるとします。
1つめのsyainテーブルです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka
3 佐藤 sato

2つめのsyain_beforeテーブルです。

syain_beforeテーブル
id name romaji
2 田中 tanaka

以下のSQLを実行します。

select * from syain 
MINUS
select * from syain_before

2行目は、MINUSを使用しています。

結果は、以下のとおりです。

抽出結果
id name romaji
1 鈴木 suzuki
3 佐藤 sato

syainテーブルのみにあるデータが表示されます。
syainテーブルとsyain_beforeテーブルに重複する行は表示されません。

比較するテーブルの値が異なっていた場合

比較するテーブルの値が異なっていた場合は、差分として抽出されません。

以下、2つのテーブルがあるとします。
1つめのsyainテーブルです。2行目のデータは、列のromajiの値がnullです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 NULL
3 佐藤 sato

2つめのsyain_beforeテーブルです。

syain_beforeテーブル
id name romaji
2 田中 tanaka

以下のSQLを実行します。

select * from syain 
MINUS
select * from syain_before

2行目は、MINUSを使用しています。

結果は、以下のとおりです。

抽出結果
id name romaji
1 鈴木 suzuki
2 田中 NULL
3 佐藤 sato

syainテーブルのデータが全件表示されます。

比較する項目がnullどうしの場合

比較する項目がnullどうしの場合でも判定できます。

以下、2つのテーブルがあるとします。
1つめのsyainテーブルです。2行目のデータにnullがあります。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 NULL
3 佐藤 sato

2つめのsyain_beforeテーブルです。
こちらもNULLがあります。

syain_beforeテーブル
id name romaji
2 田中 NULL

以下のSQLを実行します。

select * from syain 
MINUS
select * from syain_before

結果は、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
3 佐藤 sato

1,3行目のみ出力されます。

関連の記事

SQL UNIONとUNION ALLのサンプル(結合して抽出)
SQL INTERSECTのサンプル(一致行を抽出する)

△上に戻る