이번 게시글은 'PROC SQL 데이터 비교1' 게시글의 이어지는 글 입니다.
PROC SQL 구문의 가상 데이터와 자주 사용할 법한 예시를 알아보겠습니다.
활용 데이터는 이전 게시글에서 사용했던 employee_part1, employee_part2의 데이터로 동일한 사원 ID,사원 이름, 급여의 칼럼으로 구성되어 있습니다.
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;
■ EXISTS / NOT EXISTS : 데이터 존재여부 확인
proc sql;
select *
from employee_part1 a
where not exists (
select 1
from employee_part2 b
where a.empid = b.empid
);
quit;
위 코드는 PROC SQL에서 'Not Exists' 서브쿼리를 활용해서 employee_part2에는 없고, employee_part1에만 존재하는 데이터를 찾는 예제입니다.
select 1
from employee_part2 b
where a.empid = b.empid
위 코드는 서브쿼리로 employee_part2를 b라고 하며, a.empid = b.empid 두 테이블의 empid가 같은 행이 있는지 확인합니다.
select 1 은 실제 컬럼 값은 필요가 없지만 존재여부만 확인하기 위해 상수 1을 활용했습니다.
즉, employee_part1의 각 행에 대해 동일한 empid가 employee_part2에 존재하지 않는 경우만 조회하는 코드입니다.
■ EXISTS / NOT EXISTS
proc sql;
select *
from employee_part1
where empid in (
select empid
from employee_part2
);
quit;
위 코드는 두 테이블의 공통 empid (교집합) 데이터를 구하는 로직입니다.
PRCO SQL의 IN 서브쿼리를 활용해서 Employee_part2에도 존재하는 empid 데이터를 employee_part1의 행을 조회하는 코드입니다.
where empid in (
select empid
from employee_part2
);
WHERE + IN 서브쿼리는 왼쪽의 empid 서브쿼리 결과 값이 데이터 안에 포함되어 있으면 true 인 결과를 출력합니다.
INTERSECT 옵션도 공통된 값을 출력하지만, 전체 컬럼을 비교해야하지만, IN은 특정컬럼 empid 와 같은 한개의 컬럼만 가지고도 비교를 할 수 있기 때문에 비교적 실무에서 많이 사용됩니다.
Nearly 200 sessions are now available on demand in the Innovate Hub.
Watch Now →