Database/SQL
[프로그래머스 SQL Lv.2] ROOT 아이템 구하기 (MySQL)
imnyoung
2026. 1. 5. 16:56
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/273710
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 테이블
(1) ITEM_INFO
| Column name | Type | Nullable | Description |
| ITEM_ID | INTEGER | FALSE | 아이템 ID |
| ITEM_NAME | VARCHAR(N) | FALSE | 아이템 명 |
| RARITY | INTEGER | FALSE | 아이템의 희귀도 |
| PRICE | INTEGER | FALSE | 아이템의 가격 |
(2) ITEM_TREE
| Column name | Type | Nullable | Description |
| ITEM_ID | INTEGER | FALSE | 아이템 ID |
| PARENT_ITEM_ID | INTEGER | TRUE | PARENT 아이템의 ID |
'ITEM_A'->'ITEM_B'와 같이 업그레이드가 가능할 때 'ITEM_A'를 'ITEM_B'의 PARENT 아이템이라고 하며,
PARENT 아이템이 없는 아이템을 ROOT 아이템이라고 한다.
2. 문제
(1) ROOT 아이템을 찾아 (2) 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, (3) 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요.
3. 문제풀이
(1) ROOT 아이템을 찾기 위해서는 item_tree 테이블에서 RARENT_ITEM_ID가 NULL인 아이템을 찾고, 해당 아이템에 대해 item_info에 있는 item_id, item_name을 출력해야 한다. 따라서 두 테이블을 먼저 조인해야 한다.
SELECT T1.item_id, item_name -- (2) 아이템id, 아이템 이름 조회
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
SELECT문에서 item_name은 item_tree 테이블에만 있는 컬럼명이므로 시스템이 알아서 해당 테이블의 컬럼으로 인식한다. item_id는 두 테이블 모두에 있는 컬럼명이므로 어떤 테이블의 컬럼인지 명시해 줘야 한다.
이후 조인한 테이블에서 RARENT_ITEM_ID가 NULL인 아이템을 찾는다.
SELECT T1.item_id, item_name
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
WHERE T2.parent_item_id IS NULL -- (1) ROOT 아이템 찾기 (WHERE 대신 AND 사용해도 결과 동일)
WHERE 대신 AND를 사용해서 조인조건으로 먼저 걸러줄 수도 있다. 하지만 가시성을 위해 WHERE을 더 추천한다.
(3) 결과를 아이템 ID 기준으로 오름차순 정렬한다.
SELECT T1.item_id, item_name
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
WHERE T2.parent_item_id IS NULL
ORDER BY T1.item_id -- (4) item_id 기준 오름차순 정렬
4. 정답
따라서 정답은
SELECT T1.item_id, item_name
FROM item_info T1
JOIN item_tree T2
ON T1.item_id = T2.item_id
WHERE T2.parent_item_id IS NULL
ORDER BY T1.item_id