인프런 커뮤니티 질문&답변
join 관련 질문 (inner join, left join)
작성
·
21
0
inner join과 left join에 대해서 이론적으로는 이해가 되는데 실제 테이블 관계 설정시 조인을 사용해야하는 상황에 대해서 아직 감이 잘 잡히지 않습니다.
강사님께서 조인을 선택해서 사용하실때 기준이 있을까요??left join을 할시, 기준이 되는 테이블(부모 테이블) 붙이는 테이블(자식 테이블)로 이해를 했습니다.
부모테이블의 경우 집합레벨 1, 자식테이블 집합레벨 M으로 이해하는게 맞을까요??
답변 2
0
안녕하십니까,
어떤 부분이 잘 감이 잡히지 않는지 말씀해 주시면 제가 답변이 좀 더 수월할 것 같습니다만,
먼저 inner join은 두개의 테이블을 조인할 때, 서로 매핑되는 조인키가 없으면 결과를 추출하지 않습니다. 즉 두개의 테이블의 조인키값이 서로 같은 경우에만 조인에 참여할 수 있고 결과를 추출합니다. 하지만 두개의 테이블이 서로 조인키 값이 같지 않더라도(즉 조인에 참여하지 않더라도) 결과를 추출해야 하는 경우가 있습니다. 그래서 SQL에서 left join, right join, full outer join이 만들어지게 됩니다.
그리고 left join은 두개의 테이블이 서로 조인키 값이 같지 않더라도, 조인을 시작하는 테이블, 즉SQL 의 LEFT JOIN 문장의 왼쪽에 있는 테이블을 결과를 여전히 추출해 줍니다.
질문에서 "강사님께서 조인을 선택해서 사용하실때 기준이 있을까요??" 라고 하셨는데, 이게 어떤 의미인지 제가 잘 이해하지 못했습니다. 물리적인 기준은 앞에서 말씀드린대로(그리고 강의에서 말씀드린대로 ) 적용하시면 됩니다.
업무적으로는 주로 Master 테이블(가령 고객, 계좌등)과 다른 테이블을 조인하는데, 조인 키가 없더라도 Master 테이블의 레코드는 여전히 추출해 주는 경우등이 있을 것입니다(예를 들어 고객과 주문 테이블을 조인할 때 주문이 없는 고객이더라도 여전히 고객정보는 추출해 주는 경우등)
Left Join이 반드시 부모-자식간의 테이블에만 적용하는 것은 아닙니다. 부모와 자식 테이블간 조인을 하는데, 조인값이 매핑되지 않더라도 부모 테이블의 정보를 추출하는 업무적인 요건들이 많아서 그럴 뿐 해당 경우에만 국한되는 것은 아닙니다. 명확하게 부모-자식 테이블간 조인이 아니어도 left 쪽에 위치한 테이블의 정보를 그대로 유지하려는 경우에 적용될 수 있습니다.
그리고 일반적으로 부모-자식간 관계는 1:M이 가장 많지만, 1:1이 되는 경우도 있습니다. 자식 테이블이지만, 부모 PK 레벨로 단 한건의 고유 데이터가 생성되는 자식 테이블도 있을 수 있습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. bbane7410님, 질문 주셔서 감사합니다.
Inner Join vs Left Join 선택 기준
- Inner Join은 두 테이블 모두에서 일치하는 행이 있을 때만 결과를 반환합니다. 따라서, 두 테이블의 관련 데이터가 모두 필요할 때 사용합니다. 예를 들어, 주문한 고객과 그 주문에 대한 정보가 모두 필요할 경우입니다.
- Left Join은 왼쪽 테이블(부모 테이블)의 모든 데이터를 포함하고, 오른쪽 테이블(자식 테이블)에서 일치하는 데이터는 연결하되, 없으면 NULL로 채웁니다. 이는 주로 “부모”의 모든 항목을 유지하며 “자식”의 정보가 있는 경우 추가 정보를 가져올 때 유리합니다. 예를 들어, 고객 목록과 그 고객이 했던 주문 정보에서, 모든 고객을 포함하지만 주문이 없는 고객도 포함하고자 할 때 사용합니다.
- Inner Join은 두 테이블 모두에서 일치하는 행이 있을 때만 결과를 반환합니다. 따라서, 두 테이블의 관련 데이터가 모두 필요할 때 사용합니다. 예를 들어, 주문한 고객과 그 주문에 대한 정보가 모두 필요할 경우입니다.
강사님의 기준이라면, INNER JOIN을 사용할 때는 두 테이블 모두에 필수로 존재해야 하는 데이터가 필요할 때, LEFT JOIN을 사용할 때는 한쪽(주로 왼쪽)의 데이터를 온전히 유지하고 많은(혹은 모든) 정보가 필요하다고 판단될 때라고 생각하시면 됩니다.
부모 테이블과 자식 테이블의 집합 레벨
- 일반적으로 LEFT JOIN에서 왼쪽의 테이블을 부모 테이블, 오른쪽의 테이블을 자식 테이블이라고 볼 수 있습니다. 부모 테이블이 집합의 기준이 되는 레벨 1이고, 자식 테이블은 M(다수)로 볼 수 있지만, 이는 상호 관계에 따라 조금 다르게 해석될 수 있습니다. 중심은 LEFT(부모) 테이블이 되는 것입니다.
- 일반적으로 LEFT JOIN에서 왼쪽의 테이블을 부모 테이블, 오른쪽의 테이블을 자식 테이블이라고 볼 수 있습니다. 부모 테이블이 집합의 기준이 되는 레벨 1이고, 자식 테이블은 M(다수)로 볼 수 있지만, 이는 상호 관계에 따라 조금 다르게 해석될 수 있습니다. 중심은 LEFT(부모) 테이블이 되는 것입니다.
예를 들어 고객 테이블이 부모이고 주문 테이블이 자식이라면, 고객이 모든 주문을 포함하는 형태를 가져야 할 때 LEFT JOIN을 사용합니다.
아래에 관련된 유사한 질문과 답변이 있어서 추가 정보를 제공해 드립니다. 이는 조인 사용시 중요한 개념과 방향에 대해 이해를 돕는데 활용할 수 있습니다:
- 게시글: Outer 조인 1:n 관계 방향이 궁금합니다 - 조인 관계에서 부모와 자식의 개념에 대해 자세히 설명한 강사님의 답변이 있습니다.
- 게시글: 조인 실습-01 추가 질문이 있습니다. - 조인 순서와 집합 레벨에 대해 논의한 강사님의 답변이 유익할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





