스마트웹앱콘텐츠전문가/Oracle

Oracle Outer Join 사용법과 주의사항: (+) 연산자 완벽 가이드

9D4U 2025. 5. 2. 11:30
728x90
반응형

Oracle SQL을 사용하다 보면 외부 조인(outer join)을 구현할 때 종종 혼란스러운 오류를 마주하게 됩니다. 특히 다음과 같은 구문에서 문제가 발생하곤 하죠.

 

SELECT * 
FROM (
    SELECT * FROM table1
) A, (
    SELECT * FROM table2
) B
WHERE A.id(+) = B.id(+);

 

처음 보는 분들은 이 쿼리가 정상적으로 실행될 것으로 기대할 수 있지만, 실제로는 오라클 SQL 문법 오류가 발생합니다. 이 글에서는 위 쿼리에서 무엇이 잘못되었는지, 오라클 외부 조인 사용 시의 주의사항, 그리고 문제를 해결하는 방법까지 자세히 설명합니다.

 

 

 

img

 


외부 조인(Outer Join)이란?

 

조인은 데이터베이스에서 두 개 이상의 테이블을 연결하여 데이터를 추출할 때 사용하는 기능입니다. 특히 외부 조인(outer join)은 한 테이블에만 존재하는 데이터도 결과에 포함시키는 데 사용됩니다.

 

오라클에서는 두 가지 외부 조인 방식이 존재합니다:

  1. 기존 오라클 문법 ((+) 사용)
  2. ANSI 표준 문법 (LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN)

 

 

 

 

 


문제의 쿼리 구문 분석

 

다시 한 번 문제의 SQL 문을 살펴보겠습니다.

 

SELECT * 
FROM (
    SELECT * FROM table1
) A, (
    SELECT * FROM table2
) B
WHERE A.id(+) = B.id(+);

 

이 구문은 두 개의 서브쿼리 A, B를 조인한 후 외부 조인을 시도하고 있습니다. 하지만 핵심 문제는 WHERE 절에서 A.id(+) = B.id(+)로 양쪽에 동시에 (+) 연산자를 사용했다는 것입니다.

 

 

 

 

 


왜 A.id(+) = B.id(+)는 오류가 날까?

 

 

오라클 SQL에서 (+) 연산자는 외부 조인 대상 테이블에만 사용할 수 있습니다. 다시 말해, 누락 가능성이 있는 테이블(즉, 기준이 아닌 테이블)에만 (+)를 붙여야 합니다.

 

예:

  • A.id(+) = B.id: B를 기준으로 한 외부 조인 → A에 없는 값도 포함
  • A.id = B.id(+): A를 기준으로 한 외부 조인 → B에 없는 값도 포함
  • A.id(+) = B.id(+): ❌ 문법 오류 – 오라클에서는 지원하지 않음

 

이 오류는 "ORA-01468: a predicate may reference only one outer-joined table"과 같은 메시지를 발생시키며, 쿼리가 실행되지 않습니다.

 

 

 

 

 

반응형

 

 

 

 


해결 방법

 

원하는 결과에 따라 다음과 같은 방식으로 쿼리를 수정할 수 있습니다.

 

1. Left Outer Join

table1을 기준으로 table2와 매칭되는 데이터가 있을 경우만 결과에 포함시키고, 없으면 NULL을 출력하고 싶다면:

SELECT *
FROM (
    SELECT * FROM table1
) A,
(
    SELECT * FROM table2
) B
WHERE A.id = B.id(+);

 

2. Right Outer Join

table2를 기준으로 하고 싶다면:

SELECT *
FROM (
    SELECT * FROM table1
) A,
(
    SELECT * FROM table2
) B
WHERE A.id(+) = B.id;

 

3. Full Outer Join (권장: ANSI 문법 사용)

양쪽 테이블 모두 기준으로 포함하고 싶다면, ANSI SQL 표준 문법을 사용해야 합니다. 이 방식은 가독성이 좋고, 유지보수에도 유리합니다.

SELECT *
FROM table1 A
FULL OUTER JOIN table2 B
ON A.id = B.id;

 

 

 

 

 

 


오라클 SQL에서 (+) 문법을 사용할 때 주의할 점

 

  • (+)는 반드시 한쪽에만 사용해야 하며, 양쪽에는 절대 사용할 수 없습니다.
  • FULL OUTER JOIN은 (+) 문법으로는 구현이 불가능합니다. ANSI 조인 방식 사용이 필수입니다.
  • 서브쿼리를 사용한 경우에도 위의 원칙은 동일하게 적용됩니다.

 

 

 

 

 

 

 

Oracle SQL에서 외부 조인을 구현할 때 (+) 연산자는 유용하지만, 잘못 사용할 경우 오히려 오류를 발생시킬 수 있습니다. 특히 A.id(+) = B.id(+)처럼 양쪽에 동시에 (+)를 사용하는 건 오라클 SQL 문법상 허용되지 않습니다.

올바르게 외부 조인을 사용하기 위해선 다음 세 가지를 기억하세요:

 

  1. (+)는 항상 한쪽에만 쓸 것
  2. 가독성과 확장성을 고려해 ANSI JOIN 문법을 사용하는 것이 좋음
  3. 의도한 결과에 따라 LEFT, RIGHT, FULL OUTER JOIN을 적절히 선택할 것

오라클 SQL을 처음 접하는 초보자라면 이 같은 실수는 누구나 할 수 있습니다. 하지만 문제의 원인을 알고 나면 앞으로 더 견고하고 오류 없는 SQL 쿼리를 작성할 수 있게 될 것입니다.

728x90