🔹 JOIN이란?
두 개 이상의 테이블을 "합쳐서" 하나의 결과를 만드는 것
마치 퍼즐 조각처럼, **공통된 컬럼(열)**을 기준으로 각 테이블의 데이터를 연결하는 거야.

🔸 왜 JOIN을 써야 할까?
데이터베이스에서는 보통 정보를 여러 테이블에 나눠서 저장해.
관계형 데이터베이스는 데이터를 효율적으로 관리하기 위해 테이블을 나눠서 설계해. 그래서 필요한 정보를 얻으려면 관련된 테이블들을 연결해서 봐야 해. 이때 쓰는 게 조인이야!
✅ 조인의 종류
오라클 SQL에서 자주 쓰는 조인은 크게 아래 4가지야:
| 조인 종류 | 설명 |
| INNER JOIN | 조건에 일치하는 행만 조회 |
| OUTER JOIN | 조건이 일치하지 않더라도 한쪽 테이블의 모든 데이터 포함 |
| CROSS JOIN | 두 테이블의 모든 조합 (곱집합) |
| SELF JOIN | 하나의 테이블을 자기 자신과 조인 |
1️⃣ INNER JOIN (내부 조인)
양쪽 테이블에 모두 존재하는 값만 결과에 포함시켜.
✅ 문법
SELECT 컬럼들
FROM 테이블1 A
INNER JOIN 테이블2 B
ON A.공통컬럼 = B.공통컬럼;
✅ 예제
SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMPLOYEE E
INNER JOIN DEPARTMENT D
ON E.DEPT_ID = D.DEPT_ID;
👉 직원(EMPLOYEE) 테이블과 부서(DEPARTMENT) 테이블에서, 부서 ID가 일치하는 직원만 보여줌.
2️⃣ OUTER JOIN (외부 조인)
한쪽에는 데이터가 있어도 다른쪽에는 없을 수 있어. 그 경우에도 모든 데이터를 다 보여주고, 없는 부분은 NULL로 보여줘.
종류
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 행 + 조건에 맞는 오른쪽 테이블 행
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행 + 조건에 맞는 왼쪽 테이블 행
- FULL OUTER JOIN: 양쪽 모두의 모든 행을 보여줌
✅ LEFT OUTER JOIN 예제
SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMPLOYEE E
LEFT OUTER JOIN DEPARTMENT D
ON E.DEPT_ID = D.DEPT_ID;
👉 직원은 있는데 소속 부서 정보가 없는 경우도 다 출력, 없는 부서명은 NULL.
3️⃣ ANSI JOIN vs 오라클 전용 OUTER JOIN ((+))
예전 오라클 방식에서는 OUTER JOIN을 + 기호로 썼어. 지금도 일부 사용되긴 해.
✅ 예전 방식 예시 (LEFT OUTER JOIN)
SELECT E.EMP_NAME, D.DEPT_NAME
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.DEPT_ID = D.DEPT_ID(+);
+가 붙은 쪽이 데이터가 없어도 출력될 수 있는 테이블 (즉, OUTER쪽)
4️⃣ SELF JOIN
자기 자신을 조인해서 사용하는 방식
✅ 예제: 직원 테이블 안에 상사(Manager) 정보가 있는 경우
SELECT E.EMP_NAME, M.EMP_NAME AS MANAGER_NAME
FROM EMPLOYEE E
LEFT JOIN EMPLOYEE M
ON E.MANAGER_ID = M.EMP_ID;
👉 같은 테이블인데 별명(alias) 을 다르게 줘서 자기를 조인함.
📌 보너스: CROSS JOIN
모든 조합을 만드는 조인. 실무에선 거의 안 씀.
SELECT *
FROM EMPLOYEE E
CROSS JOIN DEPARTMENT D;
👉 EMPLOYEE가 5명, DEPARTMENT가 3개라면 → 15개의 결과
✅ 실전 팁
- ON 절은 조인 조건을 적는 곳 (보통 PK = FK)
- WHERE 절은 필터링 조건을 적는 곳
- 조인을 많이 쓸수록 SQL 성능이 중요해지므로 인덱스나 조건 순서를 신경 써야 함
- 같은 이름의 컬럼이 여러 테이블에 있으면 **별칭(A.컬럼)**을 꼭 써야 해
✨ 마무리 예제
SELECT E.EMP_NAME, E.SALARY, D.DEPT_NAME
FROM EMPLOYEE E
JOIN DEPARTMENT D ON E.DEPT_ID = D.DEPT_ID
WHERE E.SALARY > 3000;
→ 부서명까지 붙은 고연봉 직원 리스트를 출력하는 SQL!
'대덕인재 > Oracle' 카테고리의 다른 글
| [Oracle D-14] 서브쿼리(Subquery) (0) | 2025.04.18 |
|---|---|
| [Oracle D-13] 외부조인(Outer join) (0) | 2025.04.17 |
| [Oracle D-11] 출력순서 (0) | 2025.04.15 |
| [Oracle D-10] 집계 함수 (0) | 2025.04.14 |
| [Oracle D-9] 날짜함수 (SYSDATE, SYSTIMESTAMP, ADD_MONTHS,...등등등) (0) | 2025.04.11 |