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

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

김양희님의 프로필 이미지
김양희

작성한 질문수

[2024 리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

서브쿼리를 JOIN으로 바꾸기

작성

·

39

·

수정됨

0

안녕하세요! SUBQUERY 이해 (업데이트) 강의에서 예2의 비교 부분의 쿼리문을 JOIN으로 바꿔서 표현해보려고 하는데 실행 결과 category_id가 1부터 전부 나옵니다. 어떻게 해야 5('Comedy')보다 큰 것만 추출할 수 있을까요?

  • pdf파일 7page

image.png

 

JOIN으로 바꿔서 표현해본 쿼리문

image.png

 

실행 결과

image.png

 

답변 1

0

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

현재 JOIN 쿼리에서 WHERE 조건이 잘못되어 원하는 결과가 나오지 않고 있습니다.

기존 WHERE 절 조건에서는 fc.category_id > (c.name = 'Comedy')로 되어 있는데, 이 조건은 SQL에서 논리적으로 잘못된 방식입니다. (c.name = 'Comedy')는 불리언 값으로 처리되어, 모든 category_id에 대해 불리언 비교가 이루어지기 때문에 올바른 필터링이 되지 않습니다.

해결 방법

JOIN을 사용하면서, Comedy라는 이름을 가진 category_id보다 큰 category_id만 선택하려면, 먼저 Comedycategory_id를 가져와서 그 값보다 큰 category_id를 필터링해야 합니다. 이를 위해서는 서브쿼리로 Comedycategory_id를 가져와 직접 비교하는 방식을 사용해야 합니다.

수정된 쿼리 예시

아래와 같이 Comedycategory_id를 구하는 서브쿼리를 WHERE 절에서 활용하면 원하는 결과를 얻을 수 있습니다.

SELECT fc.category_id, COUNT(*) AS film_count
FROM film_category fc
JOIN category c ON fc.category_id = c.category_id
WHERE fc.category_id > (
    SELECT category_id FROM category WHERE name = 'Comedy'
)
GROUP BY fc.category_id;

쿼리 설명

  1. JOIN을 통해 film_category 테이블과 category 테이블을 연결합니다.

  2. WHERE 조건에서 fc.category_idComedycategory_id보다 큰 항목만 선택하도록 합니다.

  3. GROUP BYcategory_idCOUNT를 수행하여 결과를 집계합니다.

예상 결과

위와 같은 쿼리를 실행하면 Comedy 카테고리보다 큰 category_id에 해당하는 영화 개수(film_count)를 정확히 얻을 수 있습니다.

감사합니다. 잔재미코딩 드림

김양희님의 프로필 이미지
김양희

작성한 질문수

질문하기