SQL의 데이터 비교는 모든 데이터베이스 개발자가 가끔 접하게 되는 일반적인 작업입니다. 다행히 데이터 비교는 리터럴 비교, 부울 비교 등과 같은 다양한 형식으로 제공됩니다.
그러나 발생할 수 있는 실제 데이터 비교 시나리오 중 하나는 두 테이블 간의 비교입니다. 이는 데이터 검증, 오류 식별, 복제 또는 데이터 무결성 보장과 같은 작업에서 중요한 역할을 합니다.
이 튜토리얼에서는 SQL에서 두 데이터베이스 테이블을 비교하는 데 사용할 수 있는 다양한 방법과 기술을 모두 살펴보겠습니다.
샘플 데이터 설정
각 방법을 살펴보기 전에 데모 목적으로 기본 데이터 설정을 설정해 보겠습니다.
예제에 표시된 대로 샘플 데이터가 포함된 두 개의 테이블이 있습니다.
샘플 표 1:
다음은 첫 번째 테이블을 생성하고 테이블에 샘플 데이터를 삽입하기 위한 쿼리를 포함합니다.
테이블 생성 샘플_tb1 (
직원 ID INT PRIMARY KEY AUTO_INCREMENT,
이름 VARCHAR ( 오십 ) ,
성 VARCHAR ( 오십 ) ,
부서 VARCHAR ( 오십 ) ,
급여 십진수 ( 10 , 2 )
) ;
샘플_tb1에 삽입 ( 이름, 성, 부서, 급여 )
가치
( '페넬로페' , '뒤쫓다다' , '인사' , 55000.00 ) ,
( '매튜' , '새장' , '그것' , 60000.00 ) ,
( '제니퍼' , '데이비스' , '재원' , 50000.00 ) ,
( '키르스틴' , '포셋' , '그것' , 62000.00 ) ,
( '카메론' , '코스트너' , '재원' , 48000.00 ) ;
이름, 부서, 급여 등 다양한 정보가 포함된 “sample_tb1”이라는 새 테이블이 생성되어야 합니다.
결과 테이블은 다음과 같습니다.
샘플 표 2:
계속해서 두 개의 샘플 테이블을 만들어 보겠습니다. 이것이 첫 번째 테이블의 백업 복사본이라고 가정합니다. 다음과 같이 테이블을 생성하고 샘플 데이터를 삽입할 수 있습니다.
테이블 생성 샘플_tb2 (직원 ID INT PRIMARY KEY AUTO_INCREMENT,
이름 VARCHAR ( 오십 ) ,
성 VARCHAR ( 오십 ) ,
부서 VARCHAR ( 오십 ) ,
급여 십진수 ( 10 , 2 )
) ;
샘플_tb2에 삽입 ( 이름, 성, 부서, 급여 )
가치
( '페넬로페' , '뒤쫓다다' , '인사' , 55000.00 ) ,
( '매튜' , '새장' , '그것' , 60000.00 ) ,
( '제니퍼' , '데이비스' , '재원' , 50000.00 ) ,
( '키르스틴' , '포셋' , '그것' , 62000.00 ) ,
( '오드리' , '학장' , '재원' , 48000.00 ) ;
그러면 테이블이 생성되고 이전 쿼리에 지정된 대로 샘플 데이터가 삽입됩니다. 결과 테이블은 다음과 같습니다.
Except를 사용하여 두 테이블 비교
SQL에서 두 테이블을 비교하는 가장 일반적인 방법 중 하나는 EXCEPT 연산자를 사용하는 것입니다. 첫 번째 테이블에는 존재하지만 두 번째 테이블에는 없는 행을 찾습니다.
이를 사용하여 다음과 같이 샘플 테이블과 비교를 수행할 수 있습니다.
선택하다 *Sample_tb1에서
제외하고
선택하다 *
Sample_tb2에서;
이 예에서 EXCEPT 연산자는 두 번째 쿼리(sample_tb2)에 나타나지 않는 첫 번째 쿼리(sample_tb1)의 모든 고유 행을 반환합니다.
Union을 사용하여 두 테이블 비교
사용할 수 있는 두 번째 방법은 GROUP BY 절과 함께 UNION 연산자를 사용하는 것입니다. 이는 중복 레코드를 보존하면서 다른 테이블이 아닌 한 테이블에 존재하는 레코드를 식별하는 데 도움이 됩니다.
다음에 설명된 쿼리를 살펴보겠습니다.
선택하다직원_ID,
이름,
성,
부서,
샐러리
에서
(
선택하다
직원_ID,
이름,
성,
부서,
샐러리
에서
샘플_tb1
유니온 올
선택하다
직원_ID,
이름,
성,
부서,
샐러리
에서
샘플_tb2
) AS 결합_데이터
그룹 기준
직원_ID,
이름,
성,
부서,
샐러리
가지고 있는
세다 ( * ) = 1 ;
주어진 예에서는 UNION ALL 연산자를 사용하여 중복을 유지하면서 두 테이블의 데이터를 결합합니다.
그런 다음 GROUP BY 절을 사용하여 결합된 데이터를 모든 열별로 그룹화합니다. 마지막으로 HAVING 절을 사용하여 개수가 1인(중복 없음) 레코드만 선택되도록 합니다.
산출:
이 방법은 조금 더 복잡하지만 두 테이블 모두에서 누락된 실제 데이터를 얻을 때 훨씬 더 나은 통찰력을 제공합니다.
INNER JOIN을 사용하여 두 테이블 비교
생각해 본 적이 있다면 INNER JOIN을 사용해 보는 것은 어떨까요? 당신은 제 위치에 있을 것입니다. INNER JOIN을 사용하여 테이블을 비교하고 공통 레코드를 찾을 수 있습니다.
예를 들어 다음 쿼리를 살펴보겠습니다.
선택하다샘플_tb1. *
에서
샘플_tb1
내부 조인 Sample_tb2 ON
샘플_tb1.employee_id = 샘플_tb2.employee_id;
이 예에서는 SQL INNER JOIN을 사용하여 지정된 열을 기반으로 두 테이블 모두에 존재하는 레코드를 찾습니다. 이 방법은 효과가 있지만 데이터가 실제로 누락되었거나 두 테이블 모두에 있는지, 아니면 하나에만 있는지 확실하지 않기 때문에 때로는 오해의 소지가 있을 수 있습니다.
결론
이 튜토리얼에서는 SQL에서 두 테이블을 비교하는 데 사용할 수 있는 모든 방법과 기술에 대해 배웠습니다.