テーブルのデータの差分を確認する方法

この記事ではテーブルのデータの差分を確認する方法について解説します。

 テーブルのデータの差分を確認する方法

データ移行時などに移行前と移行後のテーブルでデータが同じになっているかどうかを確認することがあるかと思います。

そういったケースではMINUS演算子を使用したSQL文で差分をチェックできます。

SQL文は以下のようになります。

select * from <テーブルA> minus select * from <テーブルB>;

テーブルAを移行元、テーブルBを移行先として、移行元のテーブルに存在して、移行先のテーブルに存在しないレコードを抽出します。


 使用例

移行元「emp1」テーブルと移行先「emp2」テーブルを比較します。

それぞれに格納されているデータは以下の通りです。

SQL> select * from emp1;
 EMPNO ENAME  JOB
------ ------ -------
     1 Suzuki Manager
     2 Suzuki Manager
     3 Suzuki Manager
     4 Suzuki Manager
     5 Suzuki Manager
     6 Suzuki Manager
     7 Suzuki Manager
     8 Suzuki Manager
     9 Suzuki Manager
    10 Suzuki Manager

10行が選択されました。
SQL> select * from emp2;
 EMPNO ENAME  JOB
------ ------ -------
     1 Suzuki Manager
     2 Suzuki Manager
     3 Suzuki Manager
     4 Suzuki Manager
     5 Suzuki Manager
     6 Suzuki Manager
     7 Suzuki Manager
     8 Suzuki Manager
     9 Tanaka Manager

9行が選択されました。

SQL文を実行し、差分を確認します。

SQL> select * from emp1 minus select * from emp2;
 EMPNO ENAME  JOB
------ ------ -------
    10 Suzuki Manager
     9 Suzuki Manager

emp1に存在しemp2に存在しないEMPNO=10のレコードとENAMEに異なる値が入っているEMPNO=9のレコードが選択されました。

次にemp2とemp1を入れ替えてSQL文を実行してみます。

SQL> select * from emp2 minus select * from emp1;
 EMPNO ENAME  JOB
------ ------ -------
     9 Tanaka Manager

この場合はEMPNO=9のレコードのみが選択されます。