인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

씨쁠쁠러버님의 프로필 이미지

작성한 질문수

초보자를 위한 BigQuery(SQL) 입문

5-6. JOIN 연습 문제 3~5번

inner join 을 사용했을 때의 이점이 있을까요?

해결된 질문

작성

·

39

0

안녕하세요 카일스쿨님:)

좋은 강의 너무 잘 듣고 있습니다. 실습 하나 하나 하면서 여기까지 왔는데요.

join 예제를 풀어보면서 궁금한 점이 생겨서요.

  1. inner join을 사용하면 좀 더 타이트하게 제약을 둘 수 있고, 테이블 크기 자체도 줄일 수 있을 거 같다는 생각이 들었습니다. 결과도 동일하게 확인했습니다.

    1. 예를 들어 join 3번 문제의 경우 trainer_pokemon 테이블에 inner join으로 trainer 테이블을 붙이면 결국 포켓몬을 잡아본 trainer로 테이블이 좁혀진다고 생각했고, 다른 경우의 수 생각할 필요 없이 location과 hometown만 비교해 결과를 얻었습니다.

    2. 이때 left join을 사용하시는 이유와, 그 장점에 대해 알 수 있을까요?

감사합니다!

답변 2

0

카일스쿨님의 프로필 이미지
카일스쿨
지식공유자

안녕하세요. AI 인턴이 말해준 것이 제가 말하고 싶은 내용과 유사합니다

해당 문제는 INNER JOIN으로 하는 것도 가능합니다. JOIN을 학습할 때 LEFT, INNER JOIN을 많이 알려드리면 헷갈려하는 경우가 많아서 저는 LEFT JOIN을 위주로 말씀드리고 WHERE 조건에 특정 id가 NULL인 것을 필터링하면 INNER JOIN과 같다고 말씀드립니다.

INNER JOIN이 교집합만 처리하므로 데이터가 매우 많아질 경우엔 퍼포먼스가 더 좋을 수 있으나, 데이터 웨어하우스에선 둘 다 성능이 빠른 편이라 괜찮긴 합니다.

LEFT JOIN을 사용해서 쿼리를 작성해두면 데이터를 분석할 때 더 유연하게 사용할 수 있습니다. 실무에서 컬럼이나 조건을 바꾸면서 쿼리를 반복적으로 실행하고 데이터를 탐색해야 할 경우, INNER JOIN으로 교집합만 뽑아내면 쿼리 전체를 수정해야 하는 경우가 있습니다. 그래서 저는 조금 더 유연하게 넓은 범위로 만들고 데이터를 처리하는 것을 선호하곤 합니다.

정리하면

  • 성능 차이가 있긴 하나, LEFT Table의 Row가 엄청 많은 것이 아닌 이상 크게 문제가 될 것은 없다 판단(숫자로 정확히 말하긴 어려우나 Row가 대략 천만개 이상이라면 교집합만 필요하면 INNER를 쓸 것 같긴 한데, 그 전에 앞단에서 데이터를 한번 가공해서 사용할 것 같네요. Row를 몇천만건을 그대로 쓰는 것보단 가공한 데이터를 사용하곤 합니다)

  • 데이터 분석을 할 때 유연한 접근을 위함

 

하지만 만약 MySQL, PostgreSQL 관점에서 생각하면 INNER JOIN이 더 나은 경우도 있습니다. 이 강의는 데이터 분석에 초점을 맞춘 데이터 웨어하우스에서 쿼리를 날리는 것이고, 서비스 개발자들이 쿼리를 날리는 관점과 겹치는 부분도 있지만 겹치지 않는 부분도 있어서 상황마다 다를 것 같네요.

씨쁠쁠러버님의 프로필 이미지

아하 그렇군요, 확실히 데이터 분석 관점에서 접근했을 땐 성능적인 부분은 우선순위가 아닐 수 있을 거 같습니다.

또, 데이터 분석을 위한 조회의 유연함이라는 부분에서도 공감되구요. 답변 감사합니다, 카일스쿨님:)

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 씨쁠쁠러버님.

INNER JOINLEFT JOIN 의 사용에 관한 질문을 주셨군요.

INNER JOIN의 이점

  1. 데이터 일관성 보장: INNER JOIN은 두 테이블 간에 일치하는 레코드가 있는 경우에만 결과를 반환합니다. 이를 통해 데이터의 일관성을 보장하며, 조인된 결과에 불필요한 널 값을 남기지 않습니다.

  2. 성능 향상: 불필요한 데이터를 제거하므로 검색 결과의 크기를 줄일 수 있어 성능 향상에 기여할 수 있습니다, 특히 대량의 데이터에서 효율적입니다.

  3. 간결한 결과: 필요 없는 레코드가 포함되지 않아 결과 테이블이 간단해지고 명확해질 수 있습니다.

LEFT JOIN을 사용하는 이유와 장점

  1. 모든 좌측 테이블 데이터 유지: LEFT JOIN은 왼쪽 테이블의 모든 레코드를 유지하고, 오른쪽 테이블에서 매치되지 않는 레코드는 널 값을 반환합니다. 이를 통해 왼쪽 데이터의 존재 여부를 파악하는 데 유용합니다.

  2. 데이터 분석의 유연성: 어떤 트레이너가 포켓몬 위치와 일치하지 않는지를 알고자 하는 경우에도 유용합니다. 즉, 데이터의 누락이나 비일관성을 식별하는 데 도움이 됩니다.

  3. 잠재적 데이터 발견: 예상치 못한 데이터 관계나 누락된 데이터의 패턴을 식별할 수 있는 기회를 제공합니다.

카일님이 강의에서 LEFT JOIN을 사용한 경우는 데이터 분석의 유연성을 높이기 위함일 수 있습니다. 특히, 모든 트레이너의 데이터를 확인하면서 동시에 어떤 트레이너가 포켓몬을 잡았는지를 확인할 때 유용합니다.

관련하여 더 많은 정보를 담고 있는 join 3번, 4번 문제 답변도 참고하시길 바랍니다. 이 게시물에서는 LEFT JOININNER JOIN 사용의 맥락을 보다 깊이 있게 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.