본문 바로가기

BackEnd/DB(SQL)

Oracle JOIN 문법 총정리: ANSI vs Oracle 방식 완전 정복

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