본문 바로가기
Database

오라클 DB에서 JOIN 개념 이해하기: INNER JOIN과 OUTER JOIN

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


데이터베이스에서 JOIN은 두 개 이상의 테이블을 연결하여 데이터를 조회하는 데 사용됩니다. 특히 오라클 DB에서는 데이터 통합과 복잡한 질의를 수행할 때 JOIN을 활용하는 것이 매우 중요합니다. 이번 글에서는 JOIN의 개념과 함께 INNER JOIN  OUTER JOIN의 차이점을 상세히 설명하고, 실무에서 바로 활용할 수 있는 예제를 소개하겠습니다.


1. JOIN의 기본 개념

JOIN은 서로 다른 테이블의 연관된 데이터를 연결하는 SQL 연산입니다.
테이블 간의 관계는 **Primary Key(기본 키)**와 **Foreign Key(외래 키)**를 통해 정의됩니다.

기본 구문:

SELECT 테이블1.컬럼, 테이블2.컬럼
FROM 테이블1
JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;

2. INNER JOIN: 교집합

INNER JOIN은 두 테이블에서 조건이 일치하는 데이터만 조회합니다.
조건이 일치하지 않으면 해당 데이터는 결과에서 제외됩니다.

구문:

SELECT 테이블1.컬럼, 테이블2.컬럼
FROM 테이블1
INNER JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;

예제:
employees 테이블과 departments 테이블에서 동일한 부서의 직원 정보를 가져옵니다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 두 테이블의 department_id가 일치하는 데이터만 출력됩니다.

3. OUTER JOIN: 데이터 불일치 포함

OUTER JOIN은 조건에 맞는 데이터뿐만 아니라 한쪽 테이블에만 존재하는 데이터도 포함합니다.
OUTER JOIN은 방향에 따라 세 가지로 구분됩니다.

  1. LEFT OUTER JOIN: 왼쪽 테이블의 모든 데이터 포함. 오른쪽 테이블은 일치하는 데이터만.
  2. RIGHT OUTER JOIN: 오른쪽 테이블의 모든 데이터 포함. 왼쪽 테이블은 일치하는 데이터만.
  3. FULL OUTER JOIN: 두 테이블의 모든 데이터 포함. 일치하지 않는 데이터는 NULL로 표시.

4. LEFT OUTER JOIN: 왼쪽 테이블 기준

왼쪽 테이블의 모든 데이터를 포함하며, 오른쪽 테이블에 일치하는 데이터가 없을 경우 NULL로 표시됩니다.

구문:

SELECT 테이블1.컬럼, 테이블2.컬럼
FROM 테이블1
LEFT OUTER JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;

예제:
employees 테이블의 모든 직원과 각 직원이 속한 부서 정보를 가져옵니다. 부서가 없는 직원은 NULL로 표시됩니다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 부서가 없는 직원도 결과에 포함되며, department_name 컬럼은 NULL로 표시됩니다.

5. RIGHT OUTER JOIN: 오른쪽 테이블 기준

오른쪽 테이블의 모든 데이터를 포함하며, 왼쪽 테이블에 일치하는 데이터가 없을 경우 NULL로 표시됩니다.

구문:

SELECT 테이블1.컬럼, 테이블2.컬럼
FROM 테이블1
RIGHT OUTER JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;

예제:
모든 부서를 포함하여 각 부서의 직원 정보를 가져옵니다. 직원이 없는 부서는 NULL로 표시됩니다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 직원이 없는 부서도 결과에 포함되며, employee_id와 first_name 컬럼은 NULL로 표시됩니다.

6. FULL OUTER JOIN: 양쪽 테이블 모두 포함

양쪽 테이블의 모든 데이터를 포함하며, 일치하지 않는 데이터는 NULL로 표시됩니다.

구문:

SELECT 테이블1.컬럼, 테이블2.컬럼
FROM 테이블1
FULL OUTER JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;

예제:
모든 직원과 모든 부서를 포함하여 부서가 없는 직원 또는 직원이 없는 부서를 표시합니다.

SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON e.department_id = d.department_id;

결과:

  • 부서가 없는 직원과 직원이 없는 부서 모두 포함됩니다.

7. JOIN 사용 시의 주의점

  1. 조건 명확히 지정하기
    • JOIN 조건을 명확히 설정하지 않으면 CROSS JOIN(모든 조합) 결과가 나올 수 있습니다.
    SELECT *
    FROM employees, departments; -- 조건 없이 사용 시 모든 조합 생성
    
  2. NULL 값 처리
    • OUTER JOIN에서 NULL 값을 처리하려면 NVL 또는 COALESCE 함수 활용이 필요합니다.
  3. 성능 최적화
    • 대용량 데이터에서는 JOIN 연산이 느릴 수 있으므로 인덱스 설정 필요한 컬럼만 조회를 고려해야 합니다.

8. 실제 사례로 배우는 JOIN 활용법

사례 1: 프로젝트와 담당자 매칭

SELECT p.project_id, p.project_name, e.first_name
FROM projects p
LEFT OUTER JOIN employees e
ON p.manager_id = e.employee_id;
  • 프로젝트의 담당자가 없는 경우에도 프로젝트 정보를 포함.

사례 2: 제품과 주문 데이터 조회

SELECT o.order_id, p.product_name, o.quantity
FROM orders o
INNER JOIN products p
ON o.product_id = p.product_id;
  • 주문이 없는 제품은 제외하고 주문된 제품만 조회.

사례 3: 지역별 고객 분석

SELECT c.customer_name, r.region_name
FROM customers c
FULL OUTER JOIN regions r
ON c.region_id = r.region_id;
  • 지역 정보가 없는 고객이나 고객이 없는 지역 모두 포함.

결론

INNER JOIN과 OUTER JOIN은 데이터 통합과 분석에 필수적인 SQL 문법입니다.
상황에 맞는 JOIN 방식을 이해하고 활용하면, 더 나은 데이터 조회와 분석을 수행할 수 있습니다.
위의 예제들을 실무에 적용해보고, 복잡한 데이터 관계에서도 올바른 결과를 도출할 수 있는 SQL 능력을 키워보세요!

반응형