SQL에서 두 테이블 비교

Sqleseo Du Teibeul Bigyo



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에서 두 테이블을 비교하는 데 사용할 수 있는 모든 방법과 기술에 대해 배웠습니다.