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 절의 구분이 명확해진다.
부족한 부분을 추가한 포스팅입니다.
Oracle ] ANSI Join과 ORACLE Join
지난번 작성한 포스팅(하단 URL 참조)에서 조인의 두가지 방식이 왜 공존하는지 어떤 차이가 있는지에대해 명확히 설명을 하지 못했다. 이후 동료 개발자님의 조언으로 알게되었다. 그래서 추가
jfbta.tistory.com
728x90
'DataBase > Tibero' 카테고리의 다른 글
Tibero 라이센스 발급 및 교체 적용 (0) | 2022.09.02 |
---|---|
Tbero] 테이블 정의서와 컬럼 정의서 추출 쿼리 (0) | 2022.07.29 |
Tibero ] 테이블 스페이스(Table Space)와 스키마(Schema) 생성 후 권한 부여 (0) | 2022.05.24 |
Tibero ] 특정 조건 제외하는 경우 EXISTS와 SubQuery Join 비교 (0) | 2022.03.20 |