해당 페이지에 수록된 문제4(20년 6월) 문제에서 빈칸에 들어갈 답으로 OUTER JOIN인 것은 빈칸 앞 LEFT로 인해 알 수 있었습니다.
다만 앞에 개념 설명에서 OUTER JOIN의 경우 무관한 튜플에 NULL 값을 추가하여 결과에 추가한다는 부분이 헷갈려서 질문 드립니다.
이 문제의 경우 topic의 id와 auth의 id가 전부 매칭이 되기 때문에 NULL값을 사용하지 않아도 되는 것은 알겠으나,
그럼 이렇게 NULL값이 필요하지 않고 전부 매칭이 되는 경우에 왜 OUTER JOIN을 사용한 것인지 궁금합니다.
해당 부분으로 SQL 작성 시 INNER JOIN으로 실행해도 같은 결과가 나오게 되는 것이 맞을까요?
안녕하세요 길벗수험서 운영팀입니다.
말씀과 같이 해당 문제에서는 outer join이 아닌 inner join을 써도 무관합니다.
outer join의 경우 inner join으로 인해 손실될 튜플들을 보전하기 위해 사용되며,
일반적으로 조인하는 대상(문제의 경우 <auth>)을 정확하게 파악하지 못한 경우가 많습니다.
예를 들어, 학생 정보가 기록된 <학생명부>가 있고, 이번 시험 성적을 기록한 <성적>이 있을 때,
이를 병합하기 위해 <학생명부> left outer join <성적>을 했다고 가정하죠.
이 때 outer join을 쓴 것은 혹시나 <학생명부>에 놓친 학생이 있어서 <성적>이 기록되지 않는 것을 방지하기 위함이죠.
(학생명부가 완벽하게 작성되었다면 이럴 필요없이 inner join을 쓰면 되겠지만요.)
행복한 하루되세요 :)
-
관리자2022-10-24 11:31:14
안녕하세요 길벗수험서 운영팀입니다.
말씀과 같이 해당 문제에서는 outer join이 아닌 inner join을 써도 무관합니다.
outer join의 경우 inner join으로 인해 손실될 튜플들을 보전하기 위해 사용되며,
일반적으로 조인하는 대상(문제의 경우 <auth>)을 정확하게 파악하지 못한 경우가 많습니다.
예를 들어, 학생 정보가 기록된 <학생명부>가 있고, 이번 시험 성적을 기록한 <성적>이 있을 때,
이를 병합하기 위해 <학생명부> left outer join <성적>을 했다고 가정하죠.
이 때 outer join을 쓴 것은 혹시나 <학생명부>에 놓친 학생이 있어서 <성적>이 기록되지 않는 것을 방지하기 위함이죠.
(학생명부가 완벽하게 작성되었다면 이럴 필요없이 inner join을 쓰면 되겠지만요.)
행복한 하루되세요 :)