SQL 문제

[프로그래머스 SQL] 과일로 만든 아이스크림 고르기

빙수빈수 2023. 9. 27. 19:40

https://school.programmers.co.kr/learn/courses/30/lessons/133025

 

프로그래머스

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

programmers.co.kr

[문제]

다음은 아이스크림 가게의 상반기 주문 정보를 담은 FIRST_HALF 테이블과 아이스크림 성분에 대한 정보를 담은 ICECREAM_INFO 테이블입니다. FIRST_HALF 테이블 구조는 다음과 같으며, SHIPMENT_IDFLAVORTOTAL_ORDER 는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다. FIRST_HALF 테이블의 기본 키는 FLAVOR입니다.

 

NAME TYPE NULLABLE
TOTAL_ORDER INT(N) FALSE
FLAVOR VARCHAR(N) FALSE
TOTAL_ORDER INT(N) FALSE

ICECREAM_INFO 테이블 구조는 다음과 같으며, FLAVORINGREDITENT_TYPE 은 각각 아이스크림 맛, 아이스크림의 성분 타입을 나타냅니다. INGREDIENT_TYPE에는 아이스크림의 주 성분이 설탕이면 sugar_based라고 입력되고, 아이스크림의 주 성분이 과일이면 fruit_based라고 입력됩니다. ICECREAM_INFO의 기본 키는 FLAVOR입니다. ICECREAM_INFO테이블의 FLAVOR는 FIRST_HALF 테이블의 FLAVOR의 외래 키입니다.

 

NAME TYPE NULLABLE
FLAVOR VARCHAR(N) FALSE
INGREDIENT_TYPE VARCHAR(N) FALSE

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

 

[코드]

SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF 
INNER JOIN ICECREAM_INFO 
ON FIRST_HALF.FLAVOR=ICECREAM_INFO.FLAVOR
WHERE FIRST_HALF.TOTAL_ORDER > 3000 AND ICECREAM_INFO.INGREDIENT_TYPE LIKE 'fruit_based'
ORDER BY FIRST_HALF.TOTAL_ORDER DESC;

 

[고찰] 

 이번 문제는 SQL 코딩테스트에서 가장 많이 출제되는 JOIN을 활용한 첫 번째 문제였다. JOIN은 크게 INNER JOIN과 OUTER JOIN으로 나눌 수 있는데, INNER JOIN은 조건에 해당하는 칼럼만을 출력하고, OUTER JOIN은 조건에 만족하지 않는 컬럼도 출력한다는 차이점이 있다. 

  이번 문제는 INNER JOIN을 사용하여 해결해야 하며, INNER JOIN 형식은 아래와 같다.

SELECT 컬럼
FROM 기준테이블
INNER JOIN 다른테이블
ON 조인조건

  해당 문제에서 기준 테이블은 FIRST_HALF이고, 조인 조건은 두 테이블에 공통으로 속하는 FLVOR 속성이 같은 컬럼만 출력하는 것이다. 이때, 어떤 테이블에 속하는 속성인지 명시하기 위해 속성 앞에 테이블명.을 붙여 구분해준다. 이외 나머지 조건들은 이전 문제에서 풀었던 것 처럼 하면 정답 처리를 받을 수 있었다.