본문 바로가기
SQL_SCRIPT

Oracle, Tibero 다른 테이블의 데이터 비교

by 이노닝 2023. 12. 16.

안녕하세요.

이번에는 데이터를 서로 비교하는 쿼리를 말씀 드리고자합니다.

엑셀에서는 흔히 =Exact(A1, B1)  이런식으로 데이터를 비교하게 되는데,

DB 내에는 많은 컬럼과 로우가 존재하기 때문에 하나하나 비교하기가 어렵습니다.

 

csv로 추출해서 엑셀에 비교하거나 또는 수동으로 눈대중을 보거나 비욘드 컴페어를 사용한다거나, 

다양한 툴을 사용 할 수 있지만 쿼리 몇개로 바로 확인 하는 방법을 알려드리고자 합니다.

 

먼저 데이터의 교집합입니다.

 

 

INTERSECT 

SELECT 
	*
FROM 
	ORIGIN_TABLE
INTERSECT
SELECT
	*
FROM 
	COMPARE_TABLE
;

위와 같은 쿼리로 간단하게 교집합 데이터를 비교 할 수 있습니다. 

대신 위 쿼리는 컬럼 구조가 모두 같다라는 가정이 붙습니다.

만약 컬럼이 다르다면 직접 컬럼을 작성해야합니다.

 

SELECT 
	ORI_COL1 AS COL1
    , ORI_COL2 AS COL2
    , ORI_COL3 AS COL3
    ...
    , ORI_COL100 AS COL100
FROM 
	ORIGIN_TABLE
INTERSECT
SELECT
	COMP_COL1 AS COL1
    , COMP_COL2 AS COL2
    , COMP_COL3 AS COL3
    ...
    , COMP_COL100 AS COL100
FROM
	COMPARE_TABLE
;

 

위 방법과 같이 컬럼이 다르더라도  별명을 붙여주고 컬럼구조도 맞춰주면 쉽게 됩니다.

원본 대상 컬럼이 100개면 비교 대상 컬럼도 100개로 맞춰야합니다.

이런식으로 테이블 내 데이터 교집합을 알아보았습니다. 

 

 

이와 반대로 A데이터에는 존재하지만 B데이터에는 존재하지 않는 데이터를

쉽고 빠르게 조회하는 스크립트도 존재합니다.

MINUS

SELECT 
	*
FROM 
	ORIGIN_TABLE
MINUS
SELECT
	*
FROM 
	COMPARE_TABLE
;

위와 쿼리 구조는 똑같고 INTERSECT 에서 MINUS 로 변경되었습니다.

 

이 강력한 MINUS 함수는 데이터 이관 및 데이터 복재 시

테이블 간 데이터 값을 비교 할 때 정말 빠르고 간편하게 조회할 수 있는 쿼리입니다.

공간정보(geometry) 까지도 비교가 가능하며, 공간연산 수치가 오래걸릴 경우 Geomfromtext 함수를 사용해서

미리 텍스트화 하여 텍스트 간 비교로 쿼리코스트를 낮추는 방법도 있습니다.

 

위 Intersect 함수에서 썼던 것처럼 쿼리 컬럼 별칭 및 개수를 꼭 맞춰야 합니다.

SELECT 
	ORI_COL1 AS COL1
    , ORI_COL2 AS COL2
    , ORI_COL3 AS COL3
    ...
    , ORI_COL100 AS COL100
FROM 
	ORIGIN_TABLE
MINUS
SELECT
	COMP_COL1 AS COL1
    , COMP_COL2 AS COL2
    , COMP_COL3 AS COL3
    ...
    , COMP_COL100 AS COL100
FROM
	COMPARE_TABLE
;

 

이렇게 간단하게 데이터간 비교가 가능합니다.

 

위 쿼리로 데이터 백업 시 유용하게 사용 될 수 있습니다.