오라클, ANSI 표준 아우터 조인 문의 드립니다! 0 6 4,834

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 버전입니다.

 

by 마농 [2024.01.31 18:55:13]

(+) 는 한쪽에만 붙여야죠
원본 쿼리는 D 에도 붙이고 E 에도 붙였네요.
AND e.job(+) = 'SALESMAN' 이 조건은 잘못 작성된 조건으로 (+) 없는거랑 같습니다.
즉, 이 조건은 ON 절이 아닌 WHERE 절로 빼시면 됩니다.


by 우긔 [2024.02.01 09:02:34]

안녕하세요. 답변 감사합니다.
그럼 아래 ANSI 쿼리를 오라클 쿼리로 바꾸는 방법은 없나요?
OUTER JOIN 일 경우 ON절에 조건을 주는것과 WHERE절에 조건을 주는건 결과가 다르다고 알고 있어서요.

SELECT *
FROM EMP E
LEFT OUTER JOIN
DEPT D ON ( E.DEPTNO = D.DEPTNO AND E.JOB = 'SALESMAN' )

 


by 마농 [2024.02.01 09:30:05]
SELECT *
  FROM emp e
     , dept d
 WHERE DECODE(e.job, 'SALESMAN', e.deptno) = d.deptno(+)
;

 


by 우긔 [2024.02.01 09:37:21]

아 잘못알고 있었군요.

역시 마농님! ㅎㅎ 고맙습니다!


by 우긔 [2024.02.01 09:48:26]

하나만 더 질문 드리면, 그럼 이 문제 잘못된거 아닌가요?
다른 글에도 답변해주신걸 봤긴했는데 오라클 문법가 ansi 표준 결과가 달라질 수 있을거 같아서요.


by 마농 [2024.02.01 10:04:53]

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

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입