안녕하세요.
이번에는 데이터를 서로 비교하는 쿼리를 말씀 드리고자합니다.
엑셀에서는 흔히 =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
;
이렇게 간단하게 데이터간 비교가 가능합니다.
위 쿼리로 데이터 백업 시 유용하게 사용 될 수 있습니다.
'SQL_SCRIPT' 카테고리의 다른 글
PostgreSQL psql COPY 대용량 (0) | 2025.05.30 |
---|---|
Oracle 또는 Tibero에서 숫자 나누기(제수) (1) | 2023.12.16 |
시퀀스 조회 및 생성하기. #1 (0) | 2023.07.19 |
DataBase Insert Select 문 쉽게 하기 (0) | 2023.07.12 |
Create Select Table 쉽게 생성하기 (0) | 2023.07.07 |