1) ๋ฌธ์ ์ค๋ช
- ์ด๋ ํ ๊ฒ์์์ ์ฌ์ฉ๋๋ ์์ดํ ๋ค์ ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- 'ITEM_A'->'ITEM_B'์ ๊ฐ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ ๋ 'ITEM_A'๋ฅผ 'ITEM_B'์ PARENT ์์ดํ ,PARENT ์์ดํ ์ด ์๋ ์์ดํ ์ ROOT ์์ดํ ์ด๋ผ๊ณ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด 'ITEM_A'->'ITEM_B'->'ITEM_C' ์ ๊ฐ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ ์์ดํ ์ด ์๋ค๋ฉด 'ITEM_C'์ PARENT ์์ดํ ์ 'ITEM_B' 'ITEM_B'์ PARENT ์์ดํ ์ 'ITEM_A' ROOT ์์ดํ ์ 'ITEM_A'๊ฐ ๋ฉ๋๋ค.
- ๋ค์์ ํด๋น ๊ฒ์์์ ์ฌ์ฉ๋๋ ์์ดํ ์ ๋ณด๋ฅผ ๋ด์ ITEM_INFO ํ ์ด๋ธ๊ณผ ์์ดํ ๊ด๊ณ๋ฅผ ๋ํ๋ธ ITEM_TREE ํ ์ด๋ธ์ ๋๋ค.
- ITEM_INFO ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ITEM_ID, ITEM_NAME, RARITY, PRICE๋ ๊ฐ๊ฐ ์์ดํ ID, ์์ดํ ๋ช , ์์ดํ ์ ํฌ๊ท๋, ์์ดํ ์ ๊ฐ๊ฒฉ์ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
ITEM_ID | INTEGER | FALSE |
ITEM_NAME | VARCHAR(N) | FALSE |
RARITY | INTEGER | FALSE |
PRICE | INTEGER | FALSE |
- ITEM_TREE ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ITEM_ID, PARENT_ITEM_ID๋ ๊ฐ๊ฐ ์์ดํ ID, PARENT ์์ดํ ์ ID๋ฅผ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
ITEM_ID | INTEGER | FALSE |
PARENT_ITEM_ID | INTEGER | TRUE |
- ๋จ, ๊ฐ ์์ดํ ๋ค์ ์ค์ง ํ๋์ PARENT ์์ดํ ID๋ฅผ ๊ฐ์ง๋ฉฐ, ROOT ์์ดํ ์ PARENT ์์ดํ ID๋ NULL ์ ๋๋ค.
- ROOT ์์ดํ ์ด ์๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค.
2) ๋ฌธ์
- ROOT ์์ดํ ์ ์ฐพ์ ์์ดํ ID(ITEM_ID), ์์ดํ ๋ช (ITEM_NAME)์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด ์ฃผ์ธ์.
- ์ด ๋, ๊ฒฐ๊ณผ๋ ์์ดํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด ์ฃผ์ธ์.
3) ์์
- ์๋ฅผ ๋ค์ด ITEM_INFO ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๊ณ
ITEM_ID | ITEM_NAME | RARITY | PRICE |
0 | ITEM_A | COMMON | 10000 |
1 | ITEM_B | LEGEND | 9000 |
2 | ITEM_C | LEGEND | 11000 |
3 | ITEM_D | UNIQUE | 10000 |
4 | ITEM_E | LEGEND | 12000 |
- ITEM_TREE ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
ITEM_ID | PARENT_ITEM_ID |
0 | NULL |
1 | 0 |
2 | 0 |
3 | NULL |
4 | 3 |
- ROOT ์์ดํ ์ ์์ดํ ID๋ PARENT ์์ดํ ID(PARENT_ITEM_ID)๊ฐ NULL ์ธ 0, 3 ์ด๋ฏ๋ก SQL๋ฌธ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํฉ๋๋ค.
ITEM_ID | ITEM_NAME |
0 | ITEM_A |
3 | ITEM_D |
4) ํ์ด
SELECT ITEM_ID, ITEM_NAME
FROM ITEM_INFO
WHERE ITEM_ID IN (SELECT ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IS NULL)
ORDER BY ITEM_ID ASC;
[Reference]
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฐ์ํ