by 우긔 [Oracle 기초] 오라클 ANSI OUTER JOIN OUTER JOIN [2024.01.31 17:42:30]
-- 오라클 문법 쿼리
SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO(+)
AND E.JOB(+) = 'SALESMAN'
-- ANSI 표준 쿼리
SELECT *
FROM EMP E
LEFT OUTER JOIN
DEPT D ON ( E.DEPTNO = D.DEPTNO AND E.JOB = 'SALESMAN' )
오라클에서 AND E.JOB(+) = 'SALESMAN' 이 부분을 조인 조건에 준건데..
왜 두개의 결과가 다를까요..?
오라클 21C 버전입니다.
(+) 는 한쪽에만 붙여야죠
원본 쿼리는 D 에도 붙이고 E 에도 붙였네요.
AND e.job(+) = 'SALESMAN' 이 조건은 잘못 작성된 조건으로 (+) 없는거랑 같습니다.
즉, 이 조건은 ON 절이 아닌 WHERE 절로 빼시면 됩니다.
안녕하세요. 답변 감사합니다.
그럼 아래 ANSI 쿼리를 오라클 쿼리로 바꾸는 방법은 없나요?
OUTER JOIN 일 경우 ON절에 조건을 주는것과 WHERE절에 조건을 주는건 결과가 다르다고 알고 있어서요.
SELECT *
FROM EMP E
LEFT OUTER JOIN
DEPT D ON ( E.DEPTNO = D.DEPTNO AND E.JOB = 'SALESMAN' )
SELECT *
FROM emp e
, dept d
WHERE DECODE(e.job, 'SALESMAN', e.deptno) = d.deptno(+)
;
아 잘못알고 있었군요.
역시 마농님! ㅎㅎ 고맙습니다!
하나만 더 질문 드리면, 그럼 이 문제 잘못된거 아닌가요?
다른 글에도 답변해주신걸 봤긴했는데 오라클 문법가 ansi 표준 결과가 달라질 수 있을거 같아서요.

상수조건에 붙은 (+) 의 위치가 다릅니다.
- 원본 질문에는 A 에 (+) 가 붙어 있고 <-- 잘못 사용된 (+)
- 추가 질문에는 B 에 (+) 가 붙어 있습니다.