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

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

둥절둥절님의 프로필 이미지
둥절둥절

작성한 질문수

중고급 SQL과 실전 데이터 분석 101 문제 풀이 [데이터분석/과학 Part1]

실전 데이터 분석을 위한 연습문제 풀기6

연습문제 28번 관련

작성

·

76

0

안녕하세요. 풀이중에 궁금한 것이 있어서 질문 납깁니다.

연습문제 28번에 2가지 방식의 쿼리문을 설명해주셨는데요, 결과값이 각각 43 row, 42 row로 반환이 되어 다른 것 같습니다. 이럴 경우 두가지 방식 중에 어떤 것이 더 확실한 방법일까요?

답변 3

0

추가로, 해당 쿼리를 다시 한번 생각해보니 놓친 부분이 있는 것 같습니다. ANSWER 자료에 있는 쿼리문은 이상이 없고요. 영상에서 WHERE 와 HAVING 둘다를 쓴 쿼리는 WHERE 절을 빼야할 것 같습니다. 이 부분은 출장을 마친 후, 업데이트하고 새소식으로 공유드리겠습니다. 불편을 드려 죄송합니다.

감사합니다.

0

안녕하세요. 답변 도우미입니다.

두가지 풀이가 살짝 좀 어떤 것인지 정확히는 기억이 애매한데요. 다음과 같은 부분이 답변이 될지 모르겠습니다. 혹시 아니시면 dream@fun-coding.org 로 두 가지 풀이와 의견을 보내주시면, 제가 지금 해외에 있어서, 금주 말까지 답변드리겠습니다. 감사합니다.

 

연습문제 28번에 제시된 두 가지 SQL 쿼리에서 결과가 다르게 나오는 이유는 다음과 같은 차이 때문입니다.

1. 첫 번째 쿼리 (`LEFT JOIN`과 HAVING COUNT(r.rental_id) = 0):

- 이 쿼리는 각 영화(`film`)에 대해 대여된 적이 없는 경우를 찾기 위해 LEFT JOIN을 사용합니다.

- rental_idNULL인 경우만을 찾으면서, GROUP BY로 영화 타이틀을 그룹화한 후, HAVING COUNT(r.rental_id) = 0으로 대여 기록이 전혀 없는 영화를 필터링합니다.

- 그러나 이 방식은 영화에 속한 모든 inventory(재고)가 대여되지 않은 경우를 찾기 때문에, 일부 inventory가 대여된 영화는 결과에서 제외됩니다.

2. 두 번째 쿼리 (`NOT IN` 서브쿼리 방식):

- 이 쿼리는 서브쿼리를 사용하여 대여된 적이 있는 영화(film_id)를 먼저 찾고, 그 영화들이 아닌 영화들을 찾습니다.

- SELECT DISTINCT(I.film_id) 서브쿼리에서는 한 번이라도 대여된 영화의 film_id를 추출하고, 메인 쿼리에서는 그 목록에 없는 영화를 출력합니다.

- 이 방식은 모든 inventory 중 하나라도 대여된 영화는 제외하고, 한 번도 대여되지 않은 영화만을 반환하는 방식입니다.

### 차이점 분석:

- 첫 번째 쿼리는 영화의 모든 inventory가 한 번도 대여되지 않은 경우를 찾습니다.

- 두 번째 쿼리한 번이라도 대여된 적이 있는 영화는 제외하고, 대여된 적이 없는 영화만을 찾습니다.

따라서, 두 번째 쿼리가 더 확실한 방법이라고 할 수 있습니다. 첫 번째 쿼리는 영화가 여러 개의 inventory를 가질 때 일부만 대여된 경우를 제외하지 못할 가능성이 있기 때문입니다. 이로 인해 결과가 다르게 나올 수 있습니다.

감사합니다.

잔재미코딩 드림

0

안녕하세요, 인프런 AI 인턴입니다. 둥절둥절님.

연습문제 28번 관련 질문해 주셔서 감사합니다. 관련된 질문에 대한 유사한 답변들은 아래 링크에서 찾아보실 수 있습니다:

  1. 추가질문드립니다… - 이 답변에서는 두 개의 SQL 쿼리가 다른 결과를 반환하는 이유에 대해 설명하고 있습니다.
  2. 질문드립니다! - 이 답변에서는 INNER JOIN을 사용하는 이유와 이에 따른 결과 차이에 대해 명확히 설명하고 있습니다.
  3. 복합쿼리 마지막 문제 질문 - 그룹핑을 다르게 했을 때 결과가 상이하게 나오는 이유를 설명한 답변입니다.

SQL 쿼리에 따라 다르게 반환되는 결과는 주로 JOIN 조건이나 GROUP BY 절에 의해 영향을 받을 수 있습니다. 두 쿼리 중 어느 것이 더 확실한 방법인지 판단하기 위해서는 데이터 구조와 쿼리의 목적을 제대로 이해할 필요가 있습니다. 예를 들어, 그룹핑한 컬럼의 차이, JOIN 조건의 차이 등을 고려해야 합니다.

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

둥절둥절님의 프로필 이미지
둥절둥절

작성한 질문수

질문하기