기초적인 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 (+)
감사합니다.
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 가 될 수밖에 없다면?
- 두 쿼리의 결과는 같아질 것입니다.
- 이 때는 둘 다 맞는 쿼리죠.
- 다만 실행계획이 다를 수 있으므로 성능을 확인해 보셔야 합니다.