프로그래머스 SQL Lv 1 - 과일로 만든 아이스크림 고르기

정새·2023년 11월 15일
0

이번에 다뤄볼 문제는 테이블 조인 및 조건을 활용하여 데이터를 조회하는 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/133025
프로그래머스 기준 Lv.1 문제이며, 풀이 후 해설과 함께 정리해보도록 하겠습니다.


문제에서 주어진 요구사항은 다음과 같습니다.

1. 아이스크림 총 주문량이 3,000보다 높으면서, 주 성분이 과일인 아이스크림
2. 이를 총 주문량이 큰 순서대로 조회

이를 해결하기 위해선 2개 테이블을 조인하여 해결해주어야 합니다.

이러한 요구사항에 맞추어 조합하여 주어진 문제에 대한 SQL문을 작성해보겠습니다.


가장 먼저 조인을 통해 조회하고자 테이블에 대해 FROM 문을 작성합니다.

상반기 아이스크림 테이블과 아이스크림 정보 테이블을 가져온 뒤 F, I로 정의합니다.

두 테이블의 데이터 중복을 방지하기 위해 기본키와 외래키가 같은 경우만을 조회합니다.

# ANSI
SELECT '비워두기'
    FROM FIRST_HALF F 
        INNER JOIN ICECREAM_INFO I
            ON F.FLAVOR = I.FLAVOR;
# ORACLE
SELECT '비워두기'
    FROM FIRST_HALF F, ICECREAM_INFO I
            WHERE F.FLAVOR = I.FLAVOR

다음으로 아이스크림의 주문량이 3,000보다 큰 값을 조회하는 조건과

아이스크림의 주 성분이 과일인 아이스크림의 값을 조회하는 조건을 작성합니다.

ORACLE JOIN의 경우엔 이를 AND 조건으로 모두 묶어주어야 합니다.

# ANSI
SELECT F.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';
# ORACLE
SELECT F.FLAVOR
    FROM FIRST_HALF F, ICECREAM_INFO I
            WHERE F.FLAVOR = I.FLAVOR AND
                F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based';

이후 조회된 전체 데이터를 주문량을 기준으로 내림차순 정렬을 정의합니다.

# ANSI
SELECT F.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'
                    ORDER BY F.total_order DESC;
# ORACLE              
SELECT F.FLAVOR
    FROM FIRST_HALF F, ICECREAM_INFO I
            WHERE F.FLAVOR = I.FLAVOR AND
                F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based'
                    ORDER BY F.total_order DESC;

복잡해보였지만 점진적 해결을 통해 손쉽게 해결해낼 수 있었습니다.


이번 문제 또한 단순 풀이는 맞았지만, 최적의 방법인지 알 수 없습니다.

특히 JOIN의 경우 처음 다뤄본 개념이기 때문에, 더욱 그렇게 느껴집니다.

다른 사람들의 코드를 읽고 배워가며, 최적화된 코드를 작성할 수 있도록 노력하겠습니다.

긴 글 읽어주셔서 감사합니다.

profile
intersection for analysis, modeling, science ... working on it !

0개의 댓글

관련 채용 정보