728x90
들어가며
Oracle에서 JOIN은 실무에서 가장 많이 쓰이는 SQL 중 하나입니다. 하지만 JOIN 방식이 두 가지(Oracle 고유 방식과 ANSI 표준 방식)로 존재하고, 각각 문법이 달라 처음 접하는 분들은 혼란스러울 수 있습니다. 이 글에서는 JOIN의 기본 개념부터 시작해서 각 JOIN 유형(Inner, Outer, Cross, Self), 그리고 실무에서 자주 하는 실수까지 하나씩 정리해보겠습니다.
1. JOIN이란 무엇인가?
JOIN은 두 개 이상의 테이블을 연결해서 하나의 결과를 반환하는 SQL 구문입니다. 관계형 DB에서 분리된 데이터를 논리적으로 연결할 때 필수적으로 사용됩니다.
2. Oracle JOIN 문법의 두 가지 방식
✅ Oracle 전통 방식 (WHERE 절 + (+) 연산자 사용)
SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno(+);
- d.deptno(+)는 dept 테이블이 OUTER 테이블이라는 의미입니다.
- 가독성이 떨어지고 실수하기 쉬워 요즘은 잘 쓰지 않습니다.
✅ ANSI 표준 JOIN (ON 절 사용)
SELECT e.ename, d.dname
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno;
- 명시적으로 JOIN 타입을 지정합니다.
- 가독성, 유지보수성이 뛰어나며 대부분의 DBMS와 호환됩니다.
3. JOIN의 종류와 예제
🔹 INNER JOIN (교집합)
SELECT e.ename, d.dname
FROM emp e
JOIN dept d ON e.deptno = d.deptno;
🔹 LEFT OUTER JOIN
SELECT e.ename, d.dname
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno;
🔹 RIGHT OUTER JOIN
SELECT e.ename, d.dname
FROM emp e
RIGHT JOIN dept d ON e.deptno = d.deptno;
🔹 FULL OUTER JOIN
SELECT e.ename, d.dname
FROM emp e
FULL JOIN dept d ON e.deptno = d.deptno;
🔹 CROSS JOIN (카티션 곱)
SELECT e.ename, d.dname
FROM emp e
CROSS JOIN dept d;
🔹 SELF JOIN
SELECT a.ename AS employee, b.ename AS manager
FROM emp a
JOIN emp b ON a.mgr = b.empno;
4. 실무에서 자주 하는 실수
- JOIN 조건을 ON 대신 WHERE 절에 쓸 경우: OUTER JOIN이 INNER JOIN처럼 동작할 수 있음
- JOIN 순서에 따른 실행 계획 변화: OUTER 테이블을 잘못 선택하면 성능 저하
- 불필요한 OUTER JOIN: INNER JOIN으로 처리 가능한데도 OUTER JOIN을 사용하는 경우
5. 성능 관점에서의 팁
- JOIN 대상 컬럼에 인덱스가 존재하는지 확인
- OUTER JOIN 시 드라이빙 테이블을 고려한 실행 계획 체크 (EXPLAIN PLAN 사용)
- 복잡한 JOIN은 WITH 절 또는 뷰로 분리하여 가독성 및 튜닝 고려
마지막으로
Oracle의 JOIN은 단순한 데이터 결합을 넘어서 설계와 성능까지 영향을 미치는 중요한 요소입니다. 전통적인 Oracle JOIN 방식은 점차 사용을 줄이고, ANSI 표준 JOIN으로 일관성 있게 사용하는 것이 현재의 권장 방식입니다. JOIN 문법에 익숙해지면 SQL 실력이 한층 레벨업되는 걸 느낄 수 있을 겁니다.
728x90
'BackEnd > DB(SQL)' 카테고리의 다른 글
[Oracle SQL] SQL 초보 탈출! 오라클 DELETE로 데이터 삭제하는 법 (0) | 2025.04.10 |
---|---|
[Oracle SQL] SQL 초보 탈출! 오라클 SELECT로 데이터 조회하는 법 (0) | 2025.04.06 |
[Oracle SQL] SQL 초보 탈출! 오라클 INSERT로 데이터 입력하는 법 (0) | 2025.04.05 |
[Oracle SQL] SQL 초보 탈출! 오라클 UPDATE로 데이터 수정하는 법 (0) | 2025.04.04 |
[DB_MySQL] 이것이 MySQL이다 ch11 전체 텍스트 검색과 파티션 2 (파티션) (0) | 2023.02.13 |