본문 바로가기

데이터베이스/SQL

[프로그래머스] MySQL 과일로 만든 아이스크림 고르기 Lv1 [엄탱]

728x90

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해 주세요.

코드

# 1. SUBQUERY를 사용한 방법
SELECT FLAVOR
FROM FIRST_HALF as f
WHERE f.TOTAL_ORDER >= 3000 
    AND f.FLAVOR IN 
    (
        SELECT i.FLAVOR 
        FROM ICECREAM_INFO as i 
        WHERE i.INGREDIENT_TYPE = 'fruit_based'
    )
ORDER BY f.TOTAL_ORDER DESC;

# 2. JOIN을 사용한 방법
SELECT f.FLAVOR
FROM FIRST_HALF as f 
    JOIN ICECREAM_INFO as i 
        ON f.FLAVOR = i.FLAVOR
WHERE f.TOTAL_ORDER >= 3000 
    AND i.INGREDIENT_TYPE = 'fruit_based'
ORDER BY f.TOTAL_ORDER DESC;

공부한 내용 및 해설

MySQL 관련 내용입니다.

프로그래머스 문제에서 풀게 된 첫 Subquery vs Join 문제다.

Subquery를 사용하는 게 좋을지 Join을 사용하는게 좋을지에 대한 블로그 내용들이 참 많은 것 같다.

그만큼 Subquery와 Join이 성능에 미치는 영향이 많기 때문이라고 생각한다.

 

나도 협업 프로젝트에서 Subquery를 사용했다가 멘토님의 코드리뷰에서 Subquery 보다는 Join을 사용하라고 권장했었다.

왜 그런가 공부를 하기 위해 검색을 하였지만, 내가 이해하기에는 어려운 내용이었고 해당 포스팅에 담기에는 주제가 맞지 않아 다는 작성할 수 없지만 확실히 Subquery보다 Join을 권장하는 이유를 어느 정도 이해가 되었다.

하지만, 무작정 Subquery를 Join으로 변경하는 것 또한 옳지 않은 것 같다. 

하나의 예시로는 In 절에는 Subquery를 사용하는 게 더 적절한 경우도 있었다. 

In절에서 Subquery를 사용해서 필터를 하는 부분을 Join으로 대체하게 되면 중복된 불필요한 데이터가 발생하여 Distint와 같은 중복 제거를 해주는 함수를 추가하게 되는데 이로 인해 성능 저하가 발생하기도 한다는 것을 알았다.

 

따라서 Subquery와 Join이 언제 성능저하를 발생시키고 언제 사용하는 게 적절한지 알고 사용하는게 중요하다는 것을 알게 되었다.

 

 

 

728x90