๊ณ์ธตํ ์ฟผ๋ฆฌ
๊ณ์ธต์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์กฐ์ํ๋ ์ฟผ๋ฆฌ
์ฃผ๋ก ์กฐ์ง๋, ํธ๋ฆฌ ๊ตฌ์กฐ ๋ฐ์ดํฐ ๋ฑ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฌธ๋ฒ
SELECT [ํํ์๋ค]
FROM [ํ
์ด๋ธ๋ช
]
START WITH [์์ ์กฐ๊ฑด]
CONNECT BY [์ฌ๊ท ์กฐ๊ฑด];
SQL
๋ณต์ฌ
โข
๊ธฐ๋ณธ ๊ตฌ์ฑ ์์
๊ตฌ๋ฌธ | ์ค๋ช
|
SELECT [ํํ์๋ค] | ์กฐํํ ์ด์ ์ง์ ํฉ๋๋ค. ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํํํ๊ธฐ ์ํ ์ด๊ณผ ์ถ๊ฐ์ ์ธ ์ด์ด ํฌํจ๋ ์ ์์ต๋๋ค. |
FROM [ํ
์ด๋ธ๋ช
] | ๊ณ์ธตํ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋์ ํ
์ด๋ธ์ ์ง์ ํฉ๋๋ค. |
START WITH [์์ ์กฐ๊ฑด] | ๊ณ์ธต ๊ตฌ์กฐ์ ์์์ ์ ์ ์ํฉ๋๋ค. ์ง์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ด ์์์ ์ด ๋ฉ๋๋ค. |
CONNECT BY [์ฌ๊ท ์กฐ๊ฑด] | ์ฌ๊ท์ ์ธ ๊ด๊ณ๋ฅผ ์ ์ํฉ๋๋ค. ์ง์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ด ์ด์ ํ๊ณผ ์ฐ๊ฒฐ๋์ด ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฑํฉ๋๋ค. |
PRIOR | CONNECT BY ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ์ด์ ํ์ ์๋ฏธํ๋ ํค์๋์ด๋ค.
PRIOR ์์ = ๋ถ๋ชจ (์ ๋ฐฉํฅ) : ๋ถ๋ชจ ์์
PRIOR ๋ถ๋ชจ = ์์ (์ญ๋ฐฉํฅ) : ์์ ๋ถ๋ชจ |
โข
CONNECT BY ํค์๋
ํค์๋ ๋ฐ ํจ์ | ์ค๋ช
|
CONNECT BY | ๊ณ์ธต์ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํ๊ธฐ ์ํ ํค์๋๋ก, ๋ถ๋ชจ-์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ง์ ํฉ๋๋ค. |
LEVEL | ํ์ฌ ํ์ ๊ณ์ธต ๋ ๋ฒจ์ ๋ํ๋ด๋ ์์ฌ ์ด์
๋๋ค. |
CONNECT_BY_ROOT | ๊ณ์ธต ๊ตฌ์กฐ์์ ์ต์์ ๋ถ๋ชจ๋ฅผ ๋ํ๋ด๋ ์์ฌ ์ด์
๋๋ค. |
CONNECT_BY_ISLEAF | ํ์ฌ ํ์ด ๋ฆฌํ(๋ง๋จ) ๋
ธ๋์ธ์ง ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ ์์ฌ ์ด์
๋๋ค. |
SYS_CONNECT_BY_PATH | ๊ณ์ธต์ ์ฟผ๋ฆฌ์์ ํ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ํจ์์
๋๋ค. |
NOCYCLE | ์ํ(cycle)์ ๋ฐฉ์งํ๊ธฐ ์ํ ์ต์
์
๋๋ค. |
CONNECT_BY_ISCYCLE | ํ์ฌ ํ์ด ์ํ ๊ตฌ์กฐ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ ์์ฌ ์ด์
๋๋ค. |
ORDER BY SIBLINGS BY ์ปฌ๋ผ | ๊ฐ์ LEVEL ๋
ธ๋ ์ฌ์ด์์ ์ ๋ ฌ์ ์ํํฉ๋๋ค. |
๊ณ์ธตํ ์ฟผ๋ฆฌ๋ก ์กฐ์ง๋๋ฅผ ์ถ๋ ฅํ๋ ์์ ์ฝ๋
SELECT LEVEL
, employee_id
, first_name
, last_name
, job_id
, manager_id
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id;
SQL
๋ณต์ฌ
โข
START WITH manager_id IS NULL: ์ต์์ ๋ถ์์ ์ง์๋ค์ ์ ํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ต์์ ์ง์์ด ๋งค๋์ ๊ฐ ์๋ ์ง์๋ค์
๋๋ค.
โข
CONNECT BY PRIOR employee_id = manager_id: ๊ฐ ํ์ ์ด์ ํ๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. ์ด์ ํ(PRIOR)์ employee_id๊ฐ ํ์ฌ ํ์ manager_id์ ๊ฐ์ ๊ฒฝ์ฐ, ๊ณ์ธต์ ์ผ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
โข
LEVEL: ๊ฐ ํ์ ๊ณ์ธต ๋ ๋ฒจ์ ๋ํ๋
๋๋ค.
โฆ
1 : ๋ํ
โฆ
2 : ๋ถ์์ฅ (์์ฌ)
โฆ
3 : ์ง์ (๋ถํ)