IT’s Ha

SQL Join 본문

SQL/MS-SQL

SQL Join

Deleloper Ha 2025. 2. 20. 11:42
728x90
반응형

이번글은 Join에대해서 설명하려고 합니다. 

데이터베이스를 운영하거나 분석하는 과정에서 여러 테이블 간의 데이터를 결합하는 작업은 매우 빈번하게 발생합니다. MSSQL에서 제공하는 JOIN 기능은 이런 작업을 손쉽게 해주며, 올바르게 사용하면 복잡한 데이터 관계를 간결하게 표현할 수 있습니다. 이 글에서는 MSSQL에서 사용 가능한 다양한 JOIN 유형과 각각의 특징, 사용 예제, 그리고 성능 최적화 팁까지 상세히 살펴보겠습니다.


1. JOIN의 기본 개념

JOIN은 두 개 이상의 테이블에서 공통된 컬럼을 기준으로 데이터를 결합하는 SQL 명령어입니다.
예를 들어, 고객 정보가 담긴 테이블과 고객의 주문 정보가 담긴 테이블이 있을 때, 두 테이블을 JOIN하여 특정 고객의 주문 내역을 한 번에 조회할 수 있습니다.

주요 포인트:

  • 관계 기반 결합: 두 테이블 간의 공통된 키(예: 고객ID)를 이용해 데이터를 연결합니다.
  • 결과 집합 확장: 단일 테이블만으로는 얻기 어려운 다양한 정보를 하나의 결과 집합으로 반환합니다.
  • 비즈니스 인사이트 도출: JOIN을 활용하면 데이터 간의 상호 관계를 쉽게 파악하여 보다 깊이 있는 분석이 가능합니다.

2. MSSQL에서 지원하는 주요 JOIN 유형

2.1 INNER JOIN

두 테이블에서 조건에 맞는 행만을 결합하여 반환합니다.

SELECT 고객.이름, 주문.주문번호, 주문.주문날짜 
 FROM 고객 
      INNER JOIN 주문 ON 고객.고객ID = 주문.고객ID;

이 쿼리는 고객 테이블과 주문 테이블에서 고객ID가 일치하는 행만 결합합니다. 만약 주문이 없는 고객이나 고객 정보가 없는 주문이 있다면 결과에 포함되지 않습니다.


2.2 LEFT (OUTER) JOIN

왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블과 일치하지 않는 경우 NULL로 채웁니다.

SELECT 고객.이름, 주문.주문번호, 주문.주문날짜 
 FROM 고객 
      LEFT JOIN 주문 ON 고객.고객ID = 주문.고객ID;


이 쿼리는 모든 고객 정보를 반환하며, 주문 정보가 없는 경우에는 주문 관련 컬럼에 NULL이 들어갑니다. 고객 기준으로 데이터를 조회할 때 유용합니다.


2.3 RIGHT (OUTER) JOIN


오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블과 일치하지 않는 경우 NULL로 표시합니다.

SELECT 고객.이름, 주문.주문번호, 주문.주문날짜 
  FROM 고객 
       RIGHT JOIN 주문 ON 고객.고객ID = 주문.고객ID;


오더 테이블의 모든 데이터를 포함하여, 고객 정보가 없는 주문에 대해서도 결과를 확인할 수 있습니다.


2.4 FULL OUTER JOIN


두 테이블의 모든 데이터를 반환하며, 일치하지 않는 경우 NULL로 채웁니다.

SELECT 고객.이름, 주문.주문번호, 주문.주문날짜 
FROM 고객 
     FULL OUTER JOIN 주문 ON 고객.고객ID = 주문.고객ID;


이 쿼리는 고객과 주문 양쪽 테이블의 모든 데이터를 포함하므로, 어느 한쪽에만 존재하는 데이터도 확인할 수 있습니다.


2.5 CROSS JOIN


두 테이블 간의 모든 가능한 조합을 생성합니다.

SELECT A.컬럼, B.컬럼 
FROM 테이블A A 
     CROSS JOIN 테이블B B;


만약 테이블A에 10개, 테이블B에 5개의 행이 있다면, 총 50개의 조합을 생성합니다. 주로 모든 조합을 계산할 때 사용됩니다.


2.6 SELF JOIN


동일한 테이블을 자신과 조인하여 데이터를 결합합니다.

SELECT A.직원ID, A.이름, B.이름 AS 상사이름 
  FROM 직원 A 
       LEFT JOIN 직원 B ON A.상사ID = B.직원ID;


직원 테이블 내에서 각 직원과 그 상사의 관계를 조회할 때 유용합니다.


3. JOIN을 활용한 데이터 분석 사례

JOIN을 통해 단순히 데이터를 결합하는 것 이상의 다양한 분석이 가능합니다. 예를 들어, 고객, 주문, 상품, 그리고 주문 상세 정보가 여러 테이블에 나뉘어 저장되어 있을 때, 이를 JOIN하여 다음과 같은 분석을 할 수 있습니다.

고객별 주문 및 상품 정보 조회

SELECT 고객.이름, 주문.주문번호, 주문.주문날짜, 상품.상품명, 상품.가격 
  FROM 고객 
       INNER JOIN 주문 ON 고객.고객ID = 주문.고객ID 
       INNER JOIN 주문상세 ON 주문.주문번호 = 주문상세.주문번호 
       INNER JOIN 상품 ON 주문상세.상품ID = 상품.상품ID;

이 예제는 네 개의 테이블을 조인하여 고객이 주문한 상품의 세부 정보를 한눈에 확인할 수 있게 합니다.


4. JOIN 성능 최적화 팁

  • 인덱스 활용:
    JOIN에 사용되는 컬럼에 인덱스를 생성하면 검색 속도를 크게 향상시킬 수 있습니다.
  • 불필요한 컬럼 제거:
    SELECT 문에서 필요한 컬럼만 선택하여 불필요한 데이터 전송을 줄입니다.
  • 쿼리 실행 계획 분석:
    SQL Server Management Studio(SSMS)의 실행 계획 기능을 활용하여 병목 구간을 확인하고 쿼리를 최적화합니다.
  • JOIN 순서 고려:
    작은 테이블부터 JOIN하여 결과 집합의 크기를 조절하면 전체 쿼리 성능에 긍정적인 영향을 줄 수 있습니다.

5. JOIN 사용 시 주의사항

  • NULL 값 처리:
    외부 JOIN(LEFT, RIGHT, FULL OUTER JOIN)을 사용할 때 발생하는 NULL 값에 대한 처리를 명확히 해야 합니다.
  • 중복 데이터 발생:
    JOIN 조건이 잘못 설정되면 의도치 않게 중복된 행이 반환될 수 있으므로 주의해야 합니다.
  • 데이터 정합성:
    JOIN 결과가 비즈니스 로직에 맞는지, 데이터 간의 관계가 올바른지 검증하는 것이 중요합니다.

6. 시각화로 보는 JOIN 구조

아래 이미지는 각 JOIN 유형의 동작 방식을 도식화한 예시입니다.
이 다이어그램을 통해 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN 등이 어떻게 데이터를 결합하는지 한눈에 이해할 수 있습니다.

이미지 설명: 이 다이어그램은 각 JOIN 방식이 두 테이블 간의 관계를 어떻게 처리하는지 시각적으로 표현합니다.

  • INNER JOIN: 공통 부분만 표시
  • LEFT JOIN: 왼쪽 테이블 전체와 오른쪽 일치 부분 표시
  • RIGHT JOIN: 오른쪽 테이블 전체와 왼쪽 일치 부분 표시
  • FULL OUTER JOIN: 두 테이블 모두 표시
  • CROSS JOIN: 모든 조합 생성

7. 고급 JOIN 활용법

서브쿼리와 JOIN의 결합

필요한 데이터를 미리 필터링하는 서브쿼리와 JOIN을 결합하면 성능을 개선할 수 있습니다.
예를 들어, 특정 기간 내의 주문 데이터만 미리 선택한 후 다른 테이블과 조인하는 방식입니다.

공통 테이블 표현식(CTE)와 JOIN

CTE를 사용하면 복잡한 쿼리를 단계별로 분해하여 작성할 수 있어 가독성이 높아집니다.

sql
복사
WITH 최근주문 AS ( SELECT * FROM 주문 WHERE 주문날짜 >= DATEADD(month, -1, GETDATE()) ) SELECT 고객.이름, 최근주문.주문번호, 최근주문.주문날짜 FROM 고객 INNER JOIN 최근주문 ON 고객.고객ID = 최근주문.고객ID;
WITH 최근주문 AS ( SELECT * FROM 주문 WHERE 주문날짜 >= DATEADD(month, -1, GETDATE()) ) 
SELECT 고객.이름, 최근주문.주문번호, 최근주문.주문날짜 
  FROM 고객 
       INNER JOIN 최근주문 ON 고객.고객ID = 최근주문.고객ID;

동적 SQL과 JOIN

동적 SQL을 사용하면 사용자 입력이나 조건에 따라 JOIN 조건을 동적으로 구성할 수 있습니다.
이 기법은 유연한 보고서를 작성하거나 복잡한 비즈니스 로직을 구현할 때 유용합니다.


MSSQL의 JOIN 기능은 여러 테이블 간의 관계를 효과적으로 연결하여 다양한 데이터를 종합적으로 분석할 수 있는 강력한 도구입니다.
JOIN의 기본 개념부터 다양한 유형, 그리고 고급 활용법까지 이해하고 적용한다면, 데이터베이스 쿼리 성능을 개선하고 보다 심도 있는 비즈니스 인사이트를 도출할 수 있습니다.

이 글을 통해 소개한 예제와 팁들이 여러분의 MSSQL 활용 능력을 한 단계 업그레이드하는 데 도움이 되길 바랍니다.

728x90
반응형
Comments