BookmarkSubscribeRSS Feed

PROC SQL 데이터 비교 3

Started 3 weeks ago by
Modified 3 weeks ago by
Views 103

해당 글은 'PROC SQL 데이터 비교 2' 의 이어지는 글로 이전 게시글에서와 같이 고급 비교방식과 실무에서 유용한 활용 사례를 중심으로 설명하겠습니다.

데이터도 employee_part1과 employee_part2 를 사용해보겠습니다.

 

 

 

 

data employee_part1;
    input empid name $ salary;
    datalines;
101 Kim 5000
102 Lee 6000
103 Park 5500
104 Choi 4800
;
run;

data employee_part2;
    input empid name $ salary;
    datalines;
103 Park 5500
104 Choi 4800
105 Jung 5200
106 Kang 7000
107 Cho 4500
108 Yoon 6200
;
run;

 

 

 

■ LEFT JOIN + IS NULL

 

 

proc sql;
    select a.*
    from employee_part1 a
    left join employee_part2 b
        on a.empid = b.empid
    where b.empid is null;
quit;

 

 

 

image.png

 

 

 

 

위 코드는 'NOT EXISTS' 옵션을 사용한 결과와 동일한 결과값을 출력합니다.

LEFT JOIN 과 IS NULL 옵션을 통해 Employee_part2에는 없고 employee_part1에만 있는 데이터를 찾는 예제입니다.

LEFT JOIN에서는 employee_part1의 데이터는 유지하면서 employee_part2에서 empid가 일치하면 데이터를 유지하지만 일치하는 행이 없으면 b (employee_part2) 테이블은 null 값으로 지정합니다.

ON은 두 테이블의 연결하는 조인하는 키로 empid가 같을 때만 두 테이블을 연결합니다.

 

 

■ Full Outer Join : 양쪽 데이터 한번헤 확인 가능

 

proc sql;
    select
        coalesce(a.empid, b.empid) as empid,
        a.name as name_p1,
        b.name as name_p2,
        a.salary as sal_p1,
        b.salary as sal_p2
    from employee_part1 a
    full join employee_part2 b
        on a.empid = b.empid
    where a.empid is null
       or b.empid is null
       or a.salary ne b.salary;
quit;

 

image.png

 

 

FULL JOIN과 COALESCE 문을 활용해서 empid를 기준으로 차이가 나는 데이터만 찾는 비교쿼리입니다.

employee_part1과 employee_part2 테이블을 empid로 전체 비교해서 한쪽에만 존재하는 행이거나 양쪽에 모두 존재하지만, salary 가 다른 행을 출력합니다.

COALSESCE는NULL이 아닌 첫번째 값을 출력합니다.

FULL JOIN에서 a 테이블에만 있으면 a.empid 로, b 테이블에만 있으면 b.empid로 한 컬럼으로 표현합니다.

FULL JOIN은 empid 칼럼을 기준으로 양쪽에 모두 있는 행을 의미합니다.