오라클 여러 테이블 join 0 1 544

by 꿈나무 [Oracle 기초] [2019.06.02 22:08:03]


기초적인 outer, inner join 궁금하여 질문드립니다.

 

a,b,c 테이블이 있습니다.

a = b(+) 관계입니다. outer

b=c 관계입니다. inner

 

그래서

select ...

from a, b,c

where

a.id= b.id (+)

b.key= c.key 

이렇게 조인을 걸었더니 a테이블에 데이터가 있는데도 조회가 되지 않더라고요..

 

제가 알기로는 여러 테이블A:B:C를 JOIN해도 실제적으로는

a:b 비교

b:c 비교라고 알고있는데요. 

 

a.id= b.id (+)

b.key = c.key (+)

b랑 c 는 inner 관계여도 다 +붙여줘야 outer로 조인이 풀리던데..

 

그럼 쓸데 없는 outer 쿼리가 되어서 이럴 경우에는 아래 처럼 뷰를 만들어서 작성하는 방법이 최선인지 문의드립니다.

 

from a,

 (select ..

   from b, c

where b.key = c.key 

) c

where a.id = c.id (+)

 

 

감사합니다.

 

by 마농 [2019.06.03 08:47:28]

1. 아우터 조인은 조인에 실패한 자료도 나오게 하기 위함인데.
 - 조인에 실패한 자료는 b 에 널이 표현될 것입니다.
 - 이때 b 와 c 를 이너조인하면 b 에 null 인 자료가 사라지죠.
 - null 인 자료도 나와야 하기 때문에 c 를 아우터 조인해야 합니다.
 - 즉 여러 테이블이 조인되는 경우, 순차적으로 아우터 조인해줘야 합니다.
2. 두 쿼리의 결과가 다를 수 있습니다.
 - 예를 들어 a,b,c 의 개수가 각각 3,2,1 개라고 했을 때
 - 1번 쿼리는 3,2,1 로 표현이 될 것이고
 - 2번 쿼리는 3,1,1 로 표현이 될 것입니다.
 - 어느 것이 맞는지는 원하는 결과가 어떤 건지에 따라 달라지는 것입니다.
3. 만약 b,c 의 개수가 2,1 이 되는 경우는 없고 무조건 2,2 가 될 수밖에 없다면?
 - 두 쿼리의 결과는 같아질 것입니다.
 - 이 때는 둘 다 맞는 쿼리죠.
 - 다만 실행계획이 다를 수 있으므로 성능을 확인해 보셔야 합니다.

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