오라클 데이터베이스에서 Join은 서로 다른 테이블의 데이터를 결합하는데 사용됩니다. 데이터베이스 개발자와 관리자에게 필수적인 개념으로 기초적인 사용법부터 고급 활용까지 살펴보겠습니다.
1) JOIN의 기본 개념
JOIN은 관계형 데이터베이스에서 두 개 이상의 테이블을 연결하고 연관된 데이터를 검색하는 SQL문입니다. 테이블 간의 관계를 기반으로 데이터를 결합하며, 주요 유형은 다음과 같습니다.
1. JOIN의 주요 유형
- INNER JOIN : 두 테이블에서 공통된 데이터만 반환
- LEFT OUTER JOIN : 왼쪽 테이블의 모든 데이터와 매칭되는 오른쪽 테이블의 데이터 반환
- RIGHT OUTER JOIN : 오른쪽 테이블의 모든 데이터와 매칭되는 왼쪽 테이블의 데이터 반환
- FULL OUTER JOIN : 양쪽 테이블의 모든 데이터를 반환
- CROSS JOIN : 두 테이블의 모든 조합 반환
- SELF JOIN : 하나의 테이블을 자신과 결합
2) JOIN 문법과 사용법
- 기본 문법
SELECT 컬럼명1, 컬럼명2, ...
FROM 테이블1
[JOIN 유형] 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼;
3) JOIN의 기본 예제
데이터 준비
다음과 같은 두 개의 테이블로 예를 들겠습니다.
- 테이블 : EMPLOYEES (직원 테이블)
EMP_ID | NAME | DEPT_ID |
1 | John | 101 |
2 | Jane | 102 |
3 | Alice | NULL |
- 테이블 : DEPARTMENTS(부서 테이블)
DEPT_ID | DEPT_NAME |
101 | HR |
102 | IT |
103 | Finance |
1. INNER JOIN
INNER JOIN 은 두 테이블에서 일치하는 데이터만 반환합니다.
SELECT E.NAME, D.DEPT_NAME
FROM EMPLOYEES E
INNER JOIN DEPARTMENTS D
ON E.DEPT_ID = D.DEPT_ID;
- 결과
NAME | DEPT_NAME |
John | HR |
Jane | IT |
2. LEFT OUTER JOIN
LEFT OUTER JOIN은 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 일치하는 데이터를 반환합니다.
SELECT E.NAME, D.DEPT_NAME
FROM EMPLOYEES E
LEFT OUTER JOIN DEPARTMENTS D
ON E.DEPT_ID = D.DEPT_ID;
- 결과
NAME | DEPT_NAME |
John | HR |
Jane | IT |
Alice | NULL |
3. RIGHT OUTER JOIN
RIGHT OUTER JOIN은 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 일치하는 데이터를 반환합니다.
SELECT E.NAME, D.DEPT_NAME
FROM EMPLOYEES E
RIGHT OUTER JOIN DEPARTMENTS D
ON E.DEPT_ID = D.DEPT_ID;
- 결과
NAME | DEPT_NAME |
John | HR |
Jane | IT |
NULL | Finance |
4. FULL OUTER JOIN
FULL OUTER JOIN은 양쪽 테이블의 모든 데이터를 반환하며, 일치하지 않는 부분은 NULL로 표시됩니다.
SELECT E.NAME, D.DEPT_NAME
FROM EMPLOYEES E
FULL OUTER JOIN DEPARTMENTS D
ON E.DEPT_ID = D.DEPT_ID;
- 결과
NAME | DEPT_NAME |
John | HR |
Jane | IT |
Alice | NULL |
NULL | Finance |
5. CROSS JOIN
CROSS JOIN은 두 테이블의 모든 조합을 반환합니다.
SELECT E.NAME, D.DEPT_NAME
FROM EMPLOYEES E
CROSS JOIN DEPARTMENTS D;
- 결과
NAME | DEPT_NAME |
John | HR |
John | IT |
John | Finance |
Jane | HR |
Jane | IT |
Jane | Finance |
Alice | HR |
Alice | IT |
Alice | Finance |
6. SELF JOIN
SELF JOIN은 같은 테이블 내에서 데이터를 결합할 때 사용됩니다.
예제 : 직원의 매니저 정보를 조회
SELECT E1.NAME AS EMPLOYEE, E2.NAME AS MANAGER
FROM EMPLOYEES E1
LEFT JOIN EMPLOYEES E2
ON E1.MANAGER_ID = E2.EMP_ID;
4) 고급 JOIN 활용
1. 다중 테이블 JOIN
세 개 이상의 테이블을 결합하려면 여러 JOIN을 사용할 수 있습니다.
SELECT E.NAME, D.DEPT_NAME, L.LOCATION
FROM EMPLOYEES E
INNER JOIN DEPARTMENTS D ON E.DEPT_ID = D.DEPT_ID
INNER JOIN LOCATIONS L ON D.LOCATION_ID = L.LOCATION_ID;
2. 서브쿼리와 JOIN 결합
JOIN과 서브쿼리를 조합하여 복잡한 데이터 구조를 간단히 표현할 수 있습니다.
SELECT E.NAME, D.DEPT_NAME
FROM EMPLOYEES E
INNER JOIN (SELECT DEPT_ID, DEPT_NAME FROM DEPARTMENTS WHERE DEPT_NAME LIKE 'H%') D
ON E.DEPT_ID = D.DEPT_ID;
5) 성능 최적화
1. 인덱스 사용
JOIN 성능은 인덱스에 크게 의존합니다. 자주 조인되는 컬럼에 인덱스를 생성하는 것이 좋습니다.
CREATE INDEX idx_dept_id ON EMPLOYEES(DEPT_ID);
2. 드라이빙 테이블 선택
JOIN 순서와 드라이빙 테이블은 쿼리 성능에 영향을 줍니다. 실행 계획 (EXPLAIN PLAN) 을 분석하여 최적화!
6) 정리 및 결론
오라클의 JOIN은 데이터를 효과적으로 결합하는 강력한 도구입니다. 기본 사용법에서 시작해 고급 기술 및 성능 최적화까지 숙지하면 효율적인 쿼리를 작성할 수 있습니다.
* 저작권 정보 : 본 글은 공개적으로 사용 가능한 오라클 SQL문서와 필자의 지식에 기반하여 작성되었습니다.
'프로그래밍' 카테고리의 다른 글
Spring Batch를 활용한 배치 작업 설계 방법 (2) | 2025.01.16 |
---|---|
CSS에서 반응형 웹을 만드는 방법 (2) | 2025.01.15 |
Java 17의 주요 기능 및 변화 (0) | 2025.01.12 |
CSS의 기초 : 웹 디자인의 필수 요수 (0) | 2025.01.11 |
OpenCV와 Python을 활용한 이미지 처리 기초 (1) | 2025.01.05 |