• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

Left join 관련

22.11.25 13:23 작성 조회수 163

0

교수님 안녕하세요. 항상 감사드립니다.

 

스크린샷 2022-11-25 오후 1.05.30.png

질문!

Left join 시에 어떤 테이블을 outer로 잡아야 하는지 좀 헷갈립니다.

 

 

1)

보통 1레벨 테이블과 과 M레벨 테이블이 있으면 1레벨 테이블을 outer로 잡는 게 맞는거지요?

 

 

스크린샷 2022-11-25 오후 1.19.18.png

그 이유는

 

dept 테이블에 있는 deptno는 PK이기에 가지고 있는 모든 값을 가져오는 반면,

emp 테이블의 deptno는 중복은 될지라도 직원의 정보가 있는 한정된 값들만 가지고 오기 때문인가요?

그래서 null값을 보려면 outer를 dept로 설정해야 하는 것인지요?

 

 

감사합니다.

 

 

 

답변 1

답변을 작성해보세요.

0

안녕하십니까,

Left Join을 할때 어떤 테이블을 Outer로 할지 고정된 조건이 없습니다. 다만 업무적인 필요성에 기반해서 Outer 집합을 결정합니다.

먼저 1 레벨, M레벨이 아니라 주로 부모 - 자식 관계의 테이블끼리 조인시 Outer를 자주 사용합니다.

부모 - 자식 관계는 보통 Primary - Foreign key관계로 표현될 수도 있지만, 부모-자식간 조인 key조건이 반드시 1: M으로 되지는 않을 수도 있습니다. 하지만 주로 조인 Key를 PK-FK로 하는 경우가 많아서 많은 경우에 부모 - 자식 관계가 조인 키로 1:M이 될 수 있습니다.

보통 Left Outer 조인을 자주 사용할 때는 부모 테이블에는 조인키로 데이터가 있지만, 자식 테이블에는 데이터가 없는 경우라도 조인을 수행해서 부모 테이블의 데이터는 보여주기를 원할때 사용합니다.

그러니까 Dept를 부모 테이블, emp를 자식 테이블(사실은 dept와 emp를 이 관계로 보기는 좀 애매합니다. 왜냐하면 부모 자식 테이블 관계는 일종의 상속 관계라는 논리적인 DB 모델링 개념이 포함되어 있지만 여기서는 그냥 부모 자식 관계로 하겠습니다)로 가정하면 dept는 조인키로 데이터가 있지만 emp에는 데이터가 없는 경우라도 조인에서 제외하지 않는 경우 dept를 left outer 조인의 outer 집합으로 사용하면 됩니다.

예를 들어 dept 테이블에 deptno가 10, 20, 30, 40 이 있고, emp 테이블에 deptno가 10, 20, 30 밖에 없을 때 dept 테이블과 emp 테이블을 조인시 dept를 left outer 조인의 outer 집합으로 사용하면 deptno 40도 추출할 수 있습니다. 단 deptno 40의 경우 emp 테이블의 값은 모두 null이 됩니다.

보통은 업무적으로 부모 테이블과 자식 테이블을 조인할 때 조인되지 않는 부모 테이블의 정보를 일단 추출하기 위해서 Left outer 조인시 outer 집합을 부모 테이블로 하는 경우가 많습니다.

하지만 이런 경우가 고정된 상황은 아닙니다. 얼마든지 다른 업무적인 필요성에 기반해서 outer 집합은 바뀔 수 있습니다.

예를 들어 emp 테이블에 deptno가 10, 20, 30, 50이 있고, dept 테이블에 deptno가 10, 20, 30, 40이 있을 경우 left outer 조인 시 outer집합을 emp테이블로 하면 10, 20, 30, 50이 출력됩니다. 이때 50의 경우는 dept테이블의 값이 null이 되는데, 이 경우 부모 테이블인 dept 테이블에 없는 deptno가 50 임을 알 수 있게 되고, 이는 데이터 정합성에 맞지 않는 데이터를 추출할 수 있게 해줍니다.

요약 드리면 얼마든지 업무적인 필요성에 의해 outer 집합은 변경될 수 있으며, 보통 부모 자식 관계의 부모 테이블을 많이 outer 집합으로 사용할 뿐입니다.

감사합니다.