Database/SQL

[프로그래머스 SQL Lv.1] 과일로 만든 아이스크림 고르기 (MySQL)

imnyoung 2025. 11. 27. 11:53

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/133025

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 테이블

(1) FIRST_HALF

NAME TYPE NULLABLE
SHIPMENT_ID INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE
FIRST_HALF 테이블의 기본 키는 FLAVOR이다.

(2) ICECREAM_INFO

NAME TYPE NULLABLE
FLAVOR VARCHAR(N) FALSE
INGREDIENT_TYPE VARCHAR(N) FALSE
ICECREAM_INFO의 기본 키는 FLAVOR이다. ICECREAM_INFO 테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키이다.

 

2. 문제

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

 

3. 문제풀이

아이스크림 총주문량은 FIRST_HALF 테이블에 있고, 아이스크림의 주성분은 ICECREAM_INFO 테이블에 있으므로 두 테이블을 JOIN해서 풀어야 하는 문제이다.

이때 INNER JOIN으로 두 개의 테이블을 연결하여 데이터를 조회한다. 조인 후 컬럼을 조회할 때는 어떤 테이블의 컬럼인지 명시해준다.

아래 아이스크림의 맛은 두 테이블에 모두 존재하는 컬럼이므로 f.flavori.flavor 모두 가능하다.

SELECT f.flavor as FLAVOR  -- (3) 아이스크림의 맛 조회. 테이블 명시해주기.
FROM first_half f  -- first_half 테이블 기준으로 
INNER JOIN icecream_info i  -- icecream_info 테이블을 inner join한다.
ON f.flavor = i.flavor  -- 이때 조인 기준은 각 테이블의 flavor 컬럼이다.
테이블에 별칭을 지어주면 코드 길이가 현저히 줄어든다.
INNER JOIN 대신 간단하게 'JOIN'만 적어도 된다. (SQL에서 JOIN 키워드만 단독으로 사용하면 INNER JOIN이 default값)

 

이제 (1) 상반기 아이스크림 총주문량이 3,000보다 높으면서 (2) 아이스크림의 주 성분이 과일 아이스크림을 찾아보자

각 테이블 명을 명시하면서 컬럼명을 작성해준다.

WHERE f.total_order > 3000   -- f 테이블의 총주문량이 3000 초과
AND i.ingredient_type = 'fruit_based'   -- i 테이블의 성분 타입이 과일 베이스인 것

 

4. 정답

따라서 정답은

SELECT i.flavor as FLAVOR
FROM first_half f
INNER JOiN icecream_info i
ON f.flavor = i.flavor
WHERE f.total_order > 3000 
AND i.ingredient_type = 'fruit_based'