오라클 조인과 ANSI 조인 차이 .... 고수님들 답변 부탁드리겠습니다.. 0

by 동동 [Oracle 기초] 오라클 조인 ANSI 조인 [2023.06.23 16:46:29]


만약 A, B 두개의 테이블이 있고 컬럼은 ID, DEPT, PAT 이 있다고 가정하겠습니다.
PK는 둘다 ID인데 , DEPT와 PAT 컬럼이 A 테이블은 필수(NOT NULL), B 테이블은 필수가 아닙니다 (NUL 값 존재)

이상황에서 아우터 조인을 걸때 오라클 조인은 아래와 같이 작성하게 됩니다.

SELECT A.ID, A.PAT, A.DEPT 
FROM A, B
WHERE A.ID = B.ID
 AND  A.PAT = B.PAT(+)
 AND  A.DEPT= B.DEPT(+)

만약 ANSI 조인으로 작성하게 되면 이게 맞나요!?
SELECT A.ID, A.PAT, A.DEPT
FROM A LEFT OUTER JOIN B
 ON A.ID = B.ID  AND A.PAT = B.PAT AND A.DEPT = B.DEPT
; 

아니면 이게 맞나요?

SELECT A.ID, A.PAT, A.DEPT
FROM A LEFT OUTER JOIN B
 ON A.ID = B.ID  
WHERE  A.PAT = B.PAT 
   AND A.DEPT = B.DEPT
;

제가 항상 오라클 조인으로만 쓰다보니 ANSI 조인이 햇깔리네요....

 

ANSI 조인에서 아래의 쿼리중 FROM 절에 들어가는 

FROM A LEFT OUTER JOIN B ON A.ID = B.ID

이부분의 조인 조건과 

WHERE 절에 들어가는

WHERE A.PAT = B.PAT   AND A.DEPT = B.DEPT ;

이부분의 조인 조건의 차이점이 무엇인가요!?

 

by 제로벅 [2023.06.24 20:51:56]

아래 쿼리에서 Id = id 만  (+) 를 빼고 조회하는 게 의미가 없어요. (+) 가 전부 있거나 없거나 해야 합니다. 

아래 조건은 inner join으로 풀립니다. (+) 가 없는 것과 같은 결과라는 의미입니다. 

SELECT A.ID, A.PAT, A.DEPT

FROM A, B

WHERE A.ID = B.ID

 AND  A.PAT = B.PAT(+)

 AND  A.DEPT= B.DEPT(+)


by 동동 [2023.06.27 16:55:13]

아하! 제가 잘못 알고 있었군요! 답변감사드립니다!!


by 마농 [2023.06.26 10:56:09]

일단. 원래의 오라클 구문은 아우터 조인이 무의미한 구문입니다. 이너조인 이라고 보시면 됩니다.
ANSI로 표현된 두개의 구문 중 1번은 아우터 조인이고, 2번은 아우터조인이 무의미한 구문입니다.
즉, 2번 구문이 똑같은 구문이긴 합니다.
다만, 원래 구문이 틀린 구문이고, 그걸 그대로 틀린 구문입니다.
구문만으로는 맞다?.틀리다? 를 논 할 수 없습니다.
뭐가 맞는지는 원하는게 뭔지에 따라 달라집니다.
원하는게 뭔지를 정확하게 알아야 합니다.


by 동동 [2023.06.27 16:55:37]

아~~

친절하신 설명 정말 감사드립니다!!

좋은하루 되세용!

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