📌 문제 정보
- 문제 이름 : 프로그래머스 - (SELECT) 과일로 만든 아이스크림 고르기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/133025
📌 문제 요약
- TABLE (1) 아이스크림 상반기 주문 정보 : FIRST_HALF
=> SHIPMENT_ID(출하 번호), FLAVOR(아이스크림 맛 = 기본키), TOTAL_ORDER (상반기 아이스크림 총주문량)
- TABLE (2) 아이스크림 성분 정보 : ICECREAM_INFO (위 테이블의 외래 키)
=> FLAVOR(아이스크림 맛 = 기본키), INGREDITENT_TYPE (아이스크림의 성분 타입)
=> 주 성분 : 설탕 (sugar_based), 과일 (fruit_based)
- 상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL문 작성
예시) FIRST_HALF 테이블 / ICECREAM_INFO 테이블
| SHIPMENT_ID | FLAVOR | TOTAL_ORDER | FLAVOR | INGREDIENT_TYPE | |
| 101 | chocolate | 3200 | chocolate | sugar_based | |
| 102 | vanilla | 2800 | vanilla | sugar_based | |
| 103 | mint_chocolate | 1700 | mint_chocolate | sugar_based | |
| 104 | caramel | 2600 | caramel | sugar_based | |
| 105 | white_chocolate | 3100 | white_chocolate | sugar_based | |
| 106 | peach | 2450 | peach | fruit_based | |
| 107 | watermelon | 2150 | watermelon | fruit_based | |
| 108 | mango | 2900 | mango | fruit_based | |
| 109 | strawberry | 3100 | strawberry | fruit_based | |
| 110 | melon | 3150 | melon | fruit_based | |
| 111 | orange | 2900 | orange | fruit_based | |
| 112 | pineapple | 2900 | pineapple | fruit_based |
상반기 아이스크림 총주문량이 3,000보다 높은 아이스크림 맛은 chocolate, strawberry, melon, white_chocolate입니다. 이 중에 아이스크림의 주 성분이 과일인 아이스크림 맛은 strawberry와 melon이고 총주문량이 큰 순서대로 아이스크림 맛을 조회하면 melon, strawberry 순으로 조회되어야 합니다.
출력)
| FLAVOR |
| melon |
| strawberry |
📌 내 풀이 및 코드
-- 아이스크림 맛 중 주문량이 3000 초과이고 성분이 과일인 맛을 조회
SELECT
FH.FLAVOR -- 결과로 보여줄 열: 아이스크림 맛
FROM
FIRST_HALF FH -- 첫 번째 테이블: 주문량 정보
JOIN
ICECREAM_INFO IC -- 두 번째 테이블: 성분 정보
ON FH.FLAVOR = IC.FLAVOR -- 두 테이블을 FLAVOR 컬럼 기준으로 연결 (JOIN 조건)
WHERE
FH.TOTAL_ORDER > 3000
AND IC.INGREDIENT_TYPE = "fruit_based"
ORDER BY
FH.TOTAL_ORDER DESC;
- 아무 생각없이 외래키, 기본키 나오니까 FOREIGN KEY를 썼는데 SELECT문에서 쓰지 않는다는걸 깜빡함. (FOREIGN KEY = CREATE TABLE 할 때) -> 이 문제는 FLAVOR별로 주문량과 성분 둘 다 필요하니까 JOIN이 필수!
- FIRST_HALF → 주문량 정보, ICECREAM_INFO → 성분 정보
→ "주문량이 3000 초과이고, 성분이 fruit_based인 FLAVOR를 찾아라" - 두 테이블의 정보를 합쳐야 하니 JOIN을 써야 함
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** JOIN **
- 두 개 이상의 테이블을 합치는 문법 (두 테이블에 있는 공통 컬럼을 기준으로 데이터를 연결)
-- 기본 문법
SELECT 컬럼들
FROM 테이블1 AS A
JOIN 테이블2 AS B
ON A.공통컬럼 = B.공통컬럼
-- 예시 (직원(EMPLOYEES) 테이블과 부서(DEPARTMENTS) 테이블을 부서 ID로 연결)
SELECT *
FROM EMPLOYEES E
JOIN DEPARTMENTS D
ON E.DEPT_ID = D.DEPT_ID;
** 기본키(PK), 외래키(FK) **
- 기본키 (Primary Key, PK) : 테이블에서 각 행(row)을 고유하게 식별할 수 있는 컬럼
- 외래키 (Foreign Key, FK) : 다른 테이블의 기본키를 참조하는 컬럼
'CODING TEST > MySQL' 카테고리의 다른 글
| Lv1 - 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2025.07.17 |
|---|---|
| Lv1 - 특정 형질을 가지는 대장균 찾기 (0) | 2025.07.17 |
| Lv1 - 자동차 대여 기록에서 장기/단기 대여 구분하기 (0) | 2025.07.17 |
| Lv1 - 평균 일일 대여 요금 구하기 (0) | 2025.07.16 |
| Lv1 - 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (0) | 2025.07.16 |
