【Oracle SQL*Plus】SELECT結果の差分を出力:MINUS

雑学

備忘録になります。2つのSELECT文の結果の差を出すコマンドが「MINUS」になります。

表示例

SQL> SELECT * FROM TABLE_A;

NAME             VAL1
---------- ----------
aaa              1111
bbb              2222
ccc              3333

SQL> SELECT * FROM TABLE_B;

NAME             VAL1
---------- ----------
aaa              1111
bbb              4444
ccc              5555
ddd              6666

SQL> SELECT * FROM TABLE_A
  2  MINUS
  3  SELECT * FROM TABLE_B;

NAME             VAL1
---------- ----------
bbb              2222
ccc              3333

SQL> SELECT * FROM TABLE_B
  2  MINUS
  3  SELECT * FROM TABLE_A;

NAME             VAL1
---------- ----------
bbb              4444
ccc              5555
ddd              6666

レコードの順序はバラバラでも構いません。先に書くSELECT文の結果において、後に書くSELECT文の結果と同じレコードが表示されなくなります。

注意点

MINUS演算子で後に書くSELECT分の結果に余計なレコードが存在していても、結果に出力されません。2つのSELECT結果が完全一致しているか確認する場合、以下の2つの方法で用います。

  1. 引く側、引かれる側を入れ替えて、両面から差分が出力されない事を確認
  2. 片側だけMINUS結果を求める+COUNT関数を使ってレコード件数の一致を確認

関連記事

外部リンク