본문 바로가기

SQL Kit/IS NULL

ROOT 아이템 구하기 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제목적

트리 구조 데이터를 SQL로 탐색하는 방법을 학습하는 것이다.

  • NULL 값의 처리 방법.
  • 테이블 조인(Join)을 통해 관련 데이터를 가져오는 방법.
  • ORDER BY 절을 이용한 결과 정렬.

2. 핵심개념

NULL 값

  • 정의: NULL은 값이 없는 상태를 나타내며 부모-자식 관계에서 최상위(Root) 노드를 나타내는 데 자주 사용된다.
  • SQL에서 IS NULL 조건을 사용해 NULL 값을 확인할 수 있다.

JOIN

  • 정의: 두 개 이상의 테이블을 연결하여 데이터를 조회하는 데 사용된다.
  • 종류: INNER JOIN, LEFT JOIN, RIGHT JOIN 등이 있으며, 여기서는 INNER JOIN을 사용한다.
SELECT columns
FROM table1
JOIN table2 ON table1.column = table2.column;

ORDER BY

  • 정의: 데이터를 특정 열을 기준으로 정렬하는 데 사용된다.
  • 기본적으로 오름차순(ASC), 내림차순(DESC)을 지정할 수 있다.
SELECT columns
FROM table
ORDER BY column ASC;

3. 문제해결 절차

  1. 문제 이해
    • ROOT 아이템은 부모 아이템 ID(PARENT_ITEM_ID)가 NULL인 레코드다.
    • ROOT 아이템의 ID와 이름을 출력해야 하며, 결과는 ID 기준으로 오름차순 정렬해야 한다.
  2. 테이블 관계 파악
    • ITEM_TREE 테이블에서 부모-자식 관계를 나타내는 PARENT_ITEM_ID를 확인.
    • ITEM_INFO 테이블에서 각 아이템의 이름과 ID를 가져옴.
  3. 필요한 데이터 추출
    • ITEM_TREE 테이블에서 PARENT_ITEM_ID가 NULL인 레코드만 선택.
    • 선택된 레코드의 ITEM_ID를 기준으로 ITEM_INFO 테이블에서 이름(ITEM_NAME)을 조회.
  4. 결과 정렬
    • 결과를 ITEM_ID 기준으로 오름차순 정렬.

4. 코드작성

-- ROOT 아이템을 조회하는 SQL 문
SELECT
    T.ITEM_ID,                      -- ROOT 아이템의 ID
    I.ITEM_NAME                     -- ROOT 아이템의 이름
FROM
    ITEM_TREE T                     -- 트리 구조를 나타내는 ITEM_TREE 테이블
JOIN
    ITEM_INFO I                     -- 아이템 정보를 포함한 ITEM_INFO 테이블
ON
    T.ITEM_ID = I.ITEM_ID           -- ITEM_ID를 기준으로 두 테이블을 조인
WHERE
    T.PARENT_ITEM_ID IS NULL        -- 부모 ID가 NULL인 ROOT 아이템만 선택
ORDER BY
    T.ITEM_ID ASC;                  -- ITEM_ID 기준으로 오름차순 정렬

5. 코드분석

1) SELECT

  • T.ITEM_ID와 I.ITEM_NAME을 조회:ITEM_NAME: ROOT 아이템의 이름.
  • ITEM_ID: ROOT 아이템의 고유 식별자.

2) FROM과 JOIN

  • ITEM_TREE와 ITEM_INFO 테이블을 ITEM_ID 열을 기준으로 조인:ITEM_INFO는 아이템의 상세 정보를 제공.
  • ITEM_TREE는 부모-자식 관계를 나타내고, PARENT_ITEM_ID가 NULL인 ROOT 아이템을 선택.

3) WHERE 조건

  • T.PARENT_ITEM_ID IS NULL 조건을 사용하여 부모가 없는 아이템(즉, ROOT 아이템)을 필터링.

4) ORDER BY

  • 결과를 ITEM_ID 기준으로 오름차순 정렬하여 ID가 작은 순서대로 출력.