본문 바로가기
프로그래밍/DB

오라클 시리즈 5편: JOIN👌

by 다다면체 2025. 9. 8.
728x90
반응형

안녕하세요, 데이터 세상의 탐험가 여러분! 🚀 데이터 분석의 여정에서 여러 갈림길에 흩어진 정보를 하나로 모아야 할 때가 있죠. 바로 이때, 마법 같은 명령어 'JOIN'이 등장합니다. 오늘은 데이터베이스의 핵심 중 하나인 JOIN에 대해 쉽고 깊이 있게 알아보겠습니다. 준비되셨나요?

흩어진 데이터를 하나로! JOIN의 필요성

데이터베이스는 정보를 효율적으로 관리하기 위해 여러 테이블에 데이터를 나누어 저장해요. 예를 들어, '직원' 정보는 직원 테이블에, '부서' 정보는 부서 테이블에 따로 저장하는 식이죠. 이렇게 잘 정리된 데이터는 중복을 줄이고 일관성을 유지하는 데 큰 도움이 됩니다.

하지만 "특정 직원이 어떤 부서에서 일하고 있지?" 와 같은 질문에 답하려면 어떻게 해야 할까요? 바로 이럴 때 JOIN이 필요합니다. JOIN은 두 개 이상의 테이블을 특정 기준(보통 공통된 열)으로 연결하여 마치 하나의 테이블처럼 보여주는 아주 강력한 기능이랍니다. 🤝


JOIN의 종류: INNER JOIN vs. OUTER JOIN

JOIN에는 여러 종류가 있지만, 가장 기본적이면서 중요한 INNER JOINOUTER JOIN에 대해 알아보겠습니다. 둘의 차이점을 이해하는 것이 JOIN을 제대로 활용하는 첫걸음이에요!

1. INNER JOIN (내부 조인): 교집합을 찾아라!

INNER JOIN은 가장 흔하게 사용되는 조인 방식이에요. 두 테이블에서 공통된 값을 가진 데이터만을 합쳐서 보여줍니다. 마치 두 원의 교집합 부분을 찾는 것과 같아요. Venn 다이어그램을 떠올리면 이해하기 쉬울 거예요! Venn 다이어그램에서 두 원이 겹치는 부분, 즉 양쪽 테이블에 모두 존재하는 데이터만 결과로 보여주는 거죠.

만약 직원 테이블에는 있지만 아직 부서가 배정되지 않은 신입사원이 있다면, INNER JOIN 결과에는 포함되지 않아요. 마찬가지로, 부서 테이블에는 있지만 아직 소속된 직원이 한 명도 없는 신생 부서가 있다면 그 부서 정보도 결과에 나타나지 않습니다.

2. OUTER JOIN (외부 조인): 한쪽이라도 있다면 OK!

OUTER JOIN은 INNER JOIN보다 조금 더 넓은 범위의 데이터를 보여줍니다. 공통된 부분을 포함하면서, 한쪽 테이블에만 데이터가 있는 경우에도 그 정보를 버리지 않고 결과에 포함시켜요. OUTER JOIN은 기준이 되는 테이블에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 나뉩니다.

  • LEFT OUTER JOIN: 왼쪽 테이블의 모든 데이터를 보여주고, 오른쪽 테이블은 공통된 값만 붙여줍니다. 만약 오른쪽 테이블에 해당 값이 없으면 'NULL' (값이 없음)으로 표시돼요. 🧍‍♂️ (왼쪽 기준!)
  • RIGHT OUTER JOIN: LEFT JOIN과 반대로, 오른쪽 테이블의 모든 데이터를 보여주고 왼쪽 테이블에서 공통된 값을 가져옵니다. 🧍‍♀️ (오른쪽 기준!)
  • FULL OUTER JOIN: 양쪽 테이블의 모든 데이터를 보여줍니다. 공통된 값이 없는 부분은 서로 'NULL'로 표시돼요. 👨‍👩‍👧‍👦 (모두 포함!)

실전 예제: 직원과 부서 테이블 합치기!

자, 이제 실제 예제를 통해 JOIN을 어떻게 사용하는지 알아볼까요? 여기 '직원 (Employees)' 테이블과 '부서 (Departments)' 테이블이 있습니다.

EmployeeID EmployeeName DepartmentID
1 김민준 101
2 이서연 102
3 박도윤 101
4 최지우 NULL
DepartmentID DepartmentName
101 개발팀
102 디자인팀
103 마케팅팀

두 테이블은 DepartmentID라는 공통된 열을 가지고 있어요. 이 DepartmentID를 기준으로 두 테이블을 연결해 보겠습니다.

INNER JOIN 예제

"각 직원의 이름과 그 직원이 속한 부서의 이름을 알려주세요."

SELECT
    E.EmployeeName,
    D.DepartmentName
FROM
    Employees AS E
INNER JOIN
    Departments AS D ON E.DepartmentID = D.DepartmentID;
  • FROM Employees AS E: Employees 테이블을 E라는 별칭으로 사용합니다.
  • INNER JOIN Departments AS D: Departments 테이블을 D라는 별칭으로 INNER JOIN 합니다.
  • ON E.DepartmentID = D.DepartmentID: E 테이블의 DepartmentID와 D 테이블의 DepartmentID가 같은 것을 기준으로 합칩니다.

[INNER JOIN 결과]

EmployeeName DepartmentName
김민준 개발팀
이서연 디자인팀
박도윤 개발팀
Sheets로 내보내기

결과를 보면, 부서가 배정되지 않은 '최지우' (DepartmentID가 NULL)와 소속 직원이 없는 '마케팅팀'은 결과에 포함되지 않은 것을 볼 수 있습니다. 정확히 두 테이블에 모두 DepartmentID가 존재하는 데이터만 보여주죠! 😉

LEFT OUTER JOIN 예제

"모든 직원의 이름을 보여주고, 소속된 부서가 있다면 부서명도 함께 보여주세요."

SELECT
    E.EmployeeName,
    D.DepartmentName
FROM
    Employees AS E
LEFT OUTER JOIN
    Departments AS D ON E.DepartmentID = D.DepartmentID;

[LEFT OUTER JOIN 결과]

EmployeeName DepartmentName
김민준 개발팀
이서연 디자인팀
박도윤 개발팀
최지우 NULL
Sheets로 내보내기

이번에는 왼쪽 테이블인 Employees의 모든 데이터가 포함되었습니다. '최지우'는 DepartmentID가 없어 Departments 테이블과 연결될 수 없었기 때문에 DepartmentName이 NULL로 표시되었네요. 이처럼 LEFT JOIN은 왼쪽 테이블의 데이터를 하나도 빠짐없이 보고 싶을 때 유용합니다. 👍


핵심 정리

  • JOIN은 여러 테이블에 흩어져 있는 데이터를 하나의 테이블처럼 볼 수 있게 해주는 핵심 기능입니다.
  • INNER JOIN은 두 테이블에 모두 존재하는 데이터 (교집합) 만을 보여줍니다.
  • OUTER JOIN은 한쪽 테이블의 데이터를 기준으로, 존재하지 않는 다른 쪽 데이터는 NULL로 표시하여 모든 데이터를 보여줍니다.
  • JOIN을 사용할 때는 두 테이블을 연결할 **기준이 되는 공통 열 (Key)**을 명확히 지정하는 것이 매우 중요합니다.

이제 여러분은 흩어진 데이터 조각들을 멋지게 하나로 합칠 수 있는 강력한 무기를 얻으셨습니다! 앞으로 데이터를 분석하고 원하는 정보를 추출할 때 JOIN을 자유자재로 활용해 보세요. 여러분의 데이터 분석 능력이 한 단계 더 성장할 거예요! ✨

728x90
반응형