728x90

통계쪽 업무를 진행하다 Where 절에서 '컬럼명(+)' 이렇게 붙어있는 생소한 문법을 보았다.

Outer Join과 비슷한 기능을 하는 것 같다. 정확히 (+)가 무엇을 의미하는 지 정리하겠다.


내가 알고있던 Outer Join 문법은 아래 코드블럭과 같다.

SELECT *
FROM TABLE1 A
FULL OUTER JOIN TABLE2 B ON A.SEQ = B.SEQ;

SELECT *
FROM TABLE1 A
LEFT OUTER JOIN TABLE2 B ON A.SEQ = B.SEQ;

SELECT *
FROM TABLE1 A
RIGHT OUTER JOIN TABLE2 B ON A.SEQ = B.SEQ;

이렇게 출력하는 경우 TABLE1과 TABLE2의 데이터 모두를 출력한다.

 

그리고 이번에 새로 알게된 (+)문법이다.

// LEFT JOIN과 같음
SELECT *
FROM TABLE1 A, TABLE2 B
WHERE A.SEQ = B.SEQ (+);

// RIGHT JOIN과 같음
SELECT *
FROM TABLE1 A, TABLE2 B
WHERE A.SEQ (+) = B.SEQ;

이것또한 결과는 [그림1]과 같다.

 

LEFT(RIGHT) OUTER JOIN 문법을 사용해도 되는데 (+) 문법을 왜 쓰는 것일까?

 

여러방면으로 차이에대해 알아보았지만 어디에도 두 문법에 차이를 설명하는 정보를 찾지 못했다. 그래서 주관적으로 생각해보았다.

 

결론은 '가독성'의 차이가 있다.

 

일반적으로 복잡한 쿼리일수록 단순히 FROM절에서 테이블만 사용하지는 않을 것이다. 서브쿼리를 굉장히 자주 볼 수 있는데 이때 JOIN을 (+)로 코드를 구분지으면서 간결해진다.

 

예시)

// 각각 서브쿼리를 사용한 예시
SELECT *
FROM TABLE1 A
LEFT OUTER JOIN (SELECT * FROM TABLE2 B WHERE A.SEQ = B.SEQ) ON A.SEQ = B.SEQ;

SELECT *
FROM TABLE1 A, 
(SELECT * FROM TABLE2 B WHERE A.SEQ = B.SEQ) B
WHERE A.SEQ = B.SEQ (+);

(+)를 사용한 경우엔 FROM절과 WHERE 절의 구분이 명확해진다.

 


부족한 부분을 추가한 포스팅입니다.

 

https://jfbta.tistory.com/121

 

Oracle ] ANSI Join과 ORACLE Join

지난번 작성한 포스팅(하단 URL 참조)에서 조인의 두가지 방식이 왜 공존하는지 어떤 차이가 있는지에대해 명확히 설명을 하지 못했다. 이후 동료 개발자님의 조언으로 알게되었다. 그래서 추가

jfbta.tistory.com

 

728x90
TOP