반응형
오라클 데이터베이스에서 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의 목적과 동작 방식을 정확히 이해하고, 데이터량과 성능 영향을 고려해 적절히 사용하세요.
실제 데이터베이스 환경에서 직접 실습하며 더 나은 쿼리를 작성하는 연습을 해보세요!
반응형
'Database' 카테고리의 다른 글
오라클 다중 행 서브쿼리와 단일 행 서브쿼리 비교 (0) | 2024.12.03 |
---|---|
오라클 서브쿼리란 무엇인가? (0) | 2024.12.03 |
오라클 DB에서 JOIN 개념 이해하기: INNER JOIN과 OUTER JOIN (0) | 2024.12.03 |
오라클 집계 함수: COUNT, SUM, AVG (0) | 2024.12.03 |
오라클 GROUP BY와 HAVING (0) | 2024.12.03 |