본문 바로가기
Database

오라클 DB에서 SELF JOIN과 CROSS JOIN 이해하기

by 굿센스굿 2024. 12. 3.
반응형


오라클 데이터베이스에서 SELF JOIN CROSS JOIN은 여러 테이블 조인 방식 중 독특한 특징을 가진 유형입니다. 이 글에서는 두 JOIN의 개념, 사용 방법, 실무에서의 활용 예제를 포함해 쉽게 이해할 수 있도록 설명합니다.


1. SELF JOIN: 자기 자신과의 조인

SELF JOIN은 하나의 테이블을 마치 두 개의 테이블인 것처럼 사용하여, 자기 자신의 데이터와 조합할 때 사용합니다. 주로 계층적 데이터 분석, 비교 작업, 또는 관계 데이터를 기반으로 다른 정보를 가져올 때 활용됩니다.

사용법

SELF JOIN은 본질적으로 INNER JOIN 또는 LEFT JOIN과 동일한 방식으로 사용되며, **같은 테이블을 서로 다른 별칭(Alias)**으로 지정해 사용합니다.

SELECT A.employee_id, A.manager_id, B.employee_id AS manager_employee_id
FROM employees A
JOIN employees B
ON A.manager_id = B.employee_id;

예시

1. 직원과 매니저 정보 조회

SELECT E1.employee_id AS employee, 
       E1.manager_id, 
       E2.employee_name AS manager_name
FROM employees E1
JOIN employees E2
ON E1.manager_id = E2.employee_id;
  • 설명: 직원(employee) 테이블에서 각 직원의 매니저(manager)를 조회합니다.
  • 결과: E1과 E2는 동일한 employees 테이블을 나타내며, manager_id를 기준으로 매니저의 이름을 가져옵니다.

2. 계층 구조 확인 (조직도)

SELECT A.employee_name AS subordinate, 
       B.employee_name AS supervisor
FROM employees A
JOIN employees B
ON A.manager_id = B.employee_id;
  • 설명: 조직 계층 구조에서 하위 직원(subordinate)과 상위 직원(supervisor)을 매핑합니다.

3. 상품 비교

SELECT A.product_id AS product_1, 
       B.product_id AS product_2
FROM products A
JOIN products B
ON A.category_id = B.category_id
WHERE A.product_id != B.product_id;
  • 설명: 동일 카테고리에 속한 서로 다른 상품 쌍을 비교합니다.

2. CROSS JOIN: 모든 가능한 조합 생성

CROSS JOIN은 두 테이블의 모든 행을 곱집합(Cartesian Product) 형태로 조합합니다. 두 테이블의 레코드 수를 곱한 만큼의 결과가 생성되므로 주의해서 사용해야 합니다.

사용법

CROSS JOIN은 두 테이블 간의 모든 조합을 반환하며, 조건이 필요하지 않습니다.

SELECT * 
FROM table1
CROSS JOIN table2;

예시

1. 모든 직원과 프로젝트 조합

SELECT E.employee_name, P.project_name
FROM employees E
CROSS JOIN projects P;
  • 설명: 모든 직원이 모든 프로젝트와 매칭된 조합을 반환합니다.
  • 결과: 직원 수 × 프로젝트 수만큼의 레코드가 생성됩니다.

2. 가격 조합 분석

SELECT P1.product_name AS product_1, 
       P2.product_name AS product_2,
       P1.price + P2.price AS total_price
FROM products P1
CROSS JOIN products P2;
  • 설명: 각 상품 간 가격 조합을 계산하여 총 가격을 비교합니다.

3. 스케줄 생성

SELECT D.day_name, T.time_slot
FROM days D
CROSS JOIN timeslots T;
  • 설명: 주어진 날(day)과 시간(time slot)의 모든 조합을 생성해 스케줄 테이블을 만듭니다.

3. SELF JOIN과 CROSS JOIN 비교

특징 SELF JOIN CROSS JOIN

의미 같은 테이블에서 데이터를 조합 두 테이블의 모든 행을 곱집합으로 생성
용도 계층적 데이터, 비교 작업, 관계 데이터 분석 모든 가능한 조합 생성
결과 조건에 따라 필터링된 결과 반환 조건 없이 모든 조합 반환
주요 키워드 INNER JOIN, LEFT JOIN 사용 가능 CROSS JOIN 키워드 사용

4. 실무 활용 사례

사례 1: 조직 계층 분석 (SELF JOIN)

SELECT E1.employee_name AS employee, 
       E2.employee_name AS manager
FROM employees E1
LEFT JOIN employees E2
ON E1.manager_id = E2.employee_id;
  • 적용: 회사 조직도에서 직원과 매니저의 관계를 시각화할 때 유용합니다.

사례 2: 상품 조합 분석 (CROSS JOIN)

SELECT P1.product_name, 
       P2.product_name, 
       P1.price + P2.price AS combined_price
FROM products P1
CROSS JOIN products P2
WHERE P1.product_id < P2.product_id;
  • 적용: 판매 전략을 수립하기 위해 상품 조합별 가격 합계를 계산합니다.

사례 3: 시간표 생성 (CROSS JOIN)

SELECT D.day_name, T.time_slot
FROM days D
CROSS JOIN timeslots T;
  • 적용: 학교나 회사의 시간표를 자동 생성할 때 활용합니다.

5. 마무리

SELF JOIN과 CROSS JOIN은 데이터 관계를 심층적으로 분석하거나 모든 가능한 조합을 생성하는 데 중요한 역할을 합니다.

  • SELF JOIN은 같은 테이블 내에서 계층적 구조를 분석하거나 관계를 매핑할 때 유용합니다.
  • CROSS JOIN은 곱집합을 생성해 스케줄링, 조합 분석 등의 문제를 해결합니다.

각 JOIN의 목적과 동작 방식을 정확히 이해하고, 데이터량과 성능 영향을 고려해 적절히 사용하세요.
실제 데이터베이스 환경에서 직접 실습하며 더 나은 쿼리를 작성하는 연습을 해보세요!

반응형