문제 링크
문제
상반기 아이스크림 총주문량이 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이 언제 성능저하를 발생시키고 언제 사용하는 게 적절한지 알고 사용하는게 중요하다는 것을 알게 되었다.
'데이터베이스 > SQL' 카테고리의 다른 글
[프로그래머스] MySQL 조건에 맞는 도서 리스트 출력하기 Lv1 [엄탱] (1) | 2023.09.02 |
---|---|
[프로그래머스] MySQL(AVG) 평균 일일 대여 요금 구하기 Lv1 [엄탱] (1) | 2023.09.02 |
[프로그래머스] MySQL(IN) 루시와 엘라 찾기 Lv2 [엄탱] (1) | 2023.09.02 |
[프로그래머스] MySQL 자동차 대여 기록에서 장기/단기 대여 구분하기 Lv1 [엄탱] (0) | 2023.09.02 |
[프로그래머스] MySQL 특정 옵션이 포함된 자동차 리스트 구하기 Lv1 [엄탱] (1) | 2023.09.02 |