본문 바로가기

IT & AI/AI 지식

SQL 활용 JOIN과 다양한 결합 방식

by 빛나는해커 2024. 11. 29.

안녕하세요! SQL에서 테이블 간의 데이터를 결합하여 분석하는 것은 매우 중요합니다. 데이터베이스에서 여러 테이블을 연결해 필요한 정보를 도출하기 위해 JOIN을 사용하며, 이는 집합 연산과 유사한 방식으로 동작하는데요.

이번 글에서는 JOIN의 종류와 각 방식의 특징을 다루고, 최적의 JOIN 방식을 선택하기 위한 기법을 소개하고자 합니다.

1. JOIN의 기본 개념

JOIN은 두 개 이상의 테이블을 연결하여 데이터를 결합하는 작업이다. 이를 통해 우리는 여러 테이블에 분산되어 있는 데이터를 한 곳에서 조회하고 분석할 수 있다.

  • 테이블 간 결합의 key 컬럼 찾기: 테이블을 결합하기 위해서는 공통된 키 컬럼을 찾는 것이 중요하다. 이 키를 기준으로 테이블을 결합하여 원하는 정보를 정확하게 도출할 수 있다.
  • JOIN 방식에 따른 결과의 차이: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOINJOIN의 유형에 따라 결과가 달라지므로 이를 잘 이해하는 것이 중요하다.
  • JOIN은 두 테이블에 적어도 하나의 공통 속성이 있을 때 적용 가능하다.

2. 교집합 JOIN (INNER JOIN)

  • INNER JOIN: 두 테이블에서 공통된 값만 결합하는 방식이다. 공통된 값만 반환되므로 결과적으로 교집합을 구하는 역할을 한다.
  • 예시:
FROM gender a
INNER JOIN age b ON a.회원코드 = b.회원코드
WHERE a.성별 = 'F';
  • 두 테이블을 결합한 후 특정 조건(성별 = 'F')을 만족하는 행만 반환한다.
  • LEFT JOIN / RIGHT JOIN:
    • LEFT JOIN은 왼쪽 테이블의 모든 행과, 오른쪽 테이블의 일치하는 행을 결합한다.
    • RIGHT JOIN은 오른쪽 테이블의 모든 행과, 왼쪽 테이블의 일치하는 행을 결합한다.
  • OUTER JOIN (FULL OUTER JOIN): 두 테이블의 모든 행을 결합하며, 일치하지 않는 데이터는 NULL로 표시한다.

3. 합집합 JOIN (UNION, UNION ALL)

  • UNION: 두 테이블의 데이터를 합집합하여 결과를 반환하며, 중복된 레코드는 제거한다.
    • 예시:
SELECT 컬럼명 FROM 테이블A
UNION
SELECT 컬럼명 FROM 테이블B;
  • UNION ALL: 중복된 레코드도 제거하지 않고 모든 데이터를 반환한다.
    • 예시:
SELECT 컬럼명 FROM 테이블A
UNION ALL
SELECT 컬럼명 FROM 테이블B;

4. 차집합 JOIN (MINUS, EXCEPT)

  • MINUS (오라클) 또는 EXCEPT (SQL Server): 두 테이블에서 공통된 데이터를 제외하고 나머지를 반환한다.
    • 예시:
SELECT 컬럼명 FROM 테이블A
MINUS
SELECT 컬럼명 FROM 테이블B;

5. 기타 JOIN 유형

  • CROSS JOIN: 두 테이블의 모든 행을 결합하여 카테시안 곱을 생성한다. 이때, M x N개의 행이 생성된다.
    • 예시:
SELECT * FROM 테이블A
CROSS JOIN 테이블B;
  • SELF JOIN: 하나의 테이블 내에서 자기 자신과 결합하는 방식이다. 동일한 테이블을 두 번 사용하므로 ALIAS를 사용하는 것이 필수적이다.
    • 예시:
SELECT a.컬럼명, b.컬럼명
FROM 테이블명 a, 테이블명 b
WHERE a.컬럼명 = b.컬럼명;

6. 옵티마이저 조인 (Optimizer JOIN)

JOIN을 수행할 때 성능을 최적화하기 위해 데이터베이스 옵티마이저는 다양한 조인 방식을 선택하며, 우리는 이를 **힌트(Hint)**를 통해 제어할 수 있다.

 

6-1. Nested Loop JOIN

  • Nested Loop JOIN선행 테이블을 먼저 조회한 뒤 후행 테이블을 반복적으로 조회하여 연결하는 방식이다.
  • 특징:
    • 선행 테이블의 크기가 작은 경우 유리하다.
    • 인덱스가 존재하면 성능이 더 좋아진다.
    • **온라인 트랜잭션 처리(OLTP)**에 적합하다.

6-2. Sort Merge JOIN

  • 두 테이블을 각각 정렬한 후, 정렬된 데이터를 병합하는 방식이다.
  • 특징:
    • 데이터 양이 많은 경우 정렬 작업 때문에 성능이 저하될 수 있다.
    • EQUI JOINnon-EQUI JOIN 모두 가능하다.

6-3. HASH JOIN

  • 작은 테이블을 해시 메모리에 로딩하고, 해시 테이블을 생성하여 연결하는 방식이다.
  • 특징:
    • 대용량 처리에 적합하며, 빠른 처리 속도를 보인다.
    • EQUI JOIN에서만 사용 가능하다.
    • 인덱스 없이도 효과적이다.

7. JOIN 활용 예시

  • 회원 데이터와 주문 데이터 결합: INNER JOIN을 사용해 회원 정보와 주문 정보를 결합하여 특정 고객의 주문 내역을 조회한다.
SELECT 회원.회원명, 주문.주문번호
FROM 회원
INNER JOIN 주문 ON 회원.회원코드 = 주문.회원코드;
  • 지역별 매출 분석: LEFT JOIN을 사용해 지역 정보를 포함한 매출 데이터를 분석할 수 있다. 지역 정보가 없는 매출 데이터도 포함된다.
SELECT 지역.지역명, 매출.매출금액
FROM 지역
LEFT JOIN 매출 ON 지역.지역코드 = 매출.지역코드;

혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.

 

SQL 기본 및 명령어 DCL, DDL, DML, TCL

안녕하세요! SQL은 관계형 데이터베이스를 다루기 위해 사용되는 언어입니다. 최근 들어 SQLD나 SQLP 자격증을 준비하시는 분들이 많으신 걸로 알고 있는데요.이번 글에서는 SQL의 기본적인 개념과

actshiny.com

 

SQL 기본 SELECT 명령어를 비롯한 다양한 함수 활용

안녕하세요! 이번 글에서는 SELECT의 기본 구조와 함께 여러 가지 유용한 함수들을 설명하고자 합니다.문자형 함수, 숫자형 함수, 날짜형 함수, 명시적/암시적 형변환, DUAL 테이블, 조건 처리 함수

actshiny.com

 

SQL 활용 GROUP 함수와 테이블 연결 기법

안녕하세요! SQL에서 데이터를 분석하고 활용하는 중요한 방법 중 하나는 다양한 GROUP 함수를 사용하는 것입니다.이번 글에서는 ROLLUP, CUBE, GROUPING SETS와 같은 고급 그룹 함수들을 중심으로 설명

actshiny.com

SQL 활용 JOIN과 다양한 결합 방식 소개 이미지

 

반응형