[SQL 4-1] SQL Joins (SQL 테이블 조인)
안녕하세요 ^^
이번 시간에는 SQL에서의 JOIN에 대한 개괄적인 소개를 하겠습니다.
▶ 두 개 이상의 Tables(=dataset)을 평행하게 결합하는 방식 알기
▷ table을 결합하는 방법 이해하기
간단한 형태의 테이블을 생성해보겠습니다.
사용할 두 개의 Table, 고객(Customers) 테이블, 거래(Transactions) 테이블은 다음과 같습니다.
O Customers 테이블은 고객 정보 테이블로서, 고객의 ID, 이름 외에도 주소, 성별 등의 컬럼을 가질 수 있습니다.
O Transactions 테이블은 거래 정보 테이블로서, 거래한 고객의 ID, 거래형태, 금액 외에도 상품ID 등의 컬럼을 가질 수 있습니다.
SQL은 “join”을 사용하여 테이블을 수평적으로 결합합니다.
“join”은 첫 번째 테이블의 행 마다 두 번째 테이블의 대응하는 행을 매칭합니다.
매칭은 두 테이블에서 하나 또는 두 개 이상의 컬럼을 기준으로 수행됩니다.
▶ inner join과 outer join 구분하기
PROC SQL은 두 가지 종류의 “join”이 있습니다.
① Inner Join
Inner Join은 매칭된 행들만을 반환합니다.
그림처럼 두 원의 공통된 부분을 제외한 나머지는 반환되지 않습니다.
② Outer Join
Outer Join은 매칭된 행들뿐 아니라 매칭되지 않은 행들도 반환할 수 있습니다.
세 개의 그림을 보면, 두 원이 겹쳐지는 부분이 아닌 노란 부분과 파란 부분 자료도 반환합니다.
앞으로 진행되는 수업에서 하나씩 실습해보겠습니다.
▶ Cartesian product(;데카르트 곱; 카티전 곱) 이해하기
JOIN의 주요한 개념 중 하나인, 일명 데카르트 곱 또는 카티전 곱이라고 하는 조합 방식에 대해 살펴보겠습니다.
(Cartesian product의 개념을 이해하는 것은 SQL에서 join을 어떻게 수행하는지 이해하는데 도움이 될 것입니다.)
Where 절 없이 From 절에 두 테이블을 코딩하면, 두 테이블의 모든 행의 조합을 만들어냅니다.
이러한 결과를 “Cartesian product”라고 합니다.
예시를 들어보겠습니다.
고객 테이블에서 3개의 행과 거래 테이블에서 3개 행에 대해 Cartesian product를 아래 코드와 같이 수행하였습니다.
위 코드를 실행하면, 아래와 같은 절차로 한 행씩 매칭된 자료가 쌓이며 최종 결과를 반출합니다.
위 과정에서 볼 수 있듯이, 두 테이블의 각 3개 행의 모든 조합을 반환하는 것을 볼 수 있습니다.
그러나, 아래 최종(마지막) 결과를 보면, ID가 서로 같지 않아 제대로 매칭되지 않은 것을 확인할 수 있습니다.
Cartesian product는 각 테이블의 행 수의 곱에 해당하는 행을 생산하게 됩니다.
두 테이블의 각 행 수가 3행, 3행이라면 총 9행을,
두 테이블의 각 행 수가 1,000행, 1,000행이라면 총 1,000,000행을,
두 테이블의 각 행 수가 100,000행, 100,000행이라면 총 10,000,000,000행을 생산하는 것을 이해할 수 있습니다.
이상 SQL에서의 JOIN과 관련된 개괄 소개였습니다.
감사합니다 ^^
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.