[ ๊ณ์ธตํ ์ฟผ๋ฆฌ ]
์ํ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ ์ํ ๊ด๊ณ๋ฅผ ํ์ํ ๋ ์ฌ์ฉํ๋ ๊ฒ
๊ณ์ธต ๊ด๊ณ๊ฐ ๋ณด์ด๊ฒ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ
[๊ณ์ธตํ ์ฟผ๋ฆฌ ๋ฌธ๋ฒ]
- START WITH ์์ ์กฐ๊ฑด ์ฐพ๊ธฐ
- CONNECT BY ์ฐ๊ฒฐ ์กฐ๊ฑด์ ์ฐพ๊ธฐ
- WHERE ์กฐ๊ฑด์ ๊ฒ์
- CONNECT BY ์๋ SUB QUERY ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
- ๋๋ ๋ฐ์ดํฐ๋ค ๊ฒฝ์ฐ ์ค๋ ์๊ฐ ๊ฑธ๋ฆฌ๋ฏ๋ก ๊ฐ๊ฐ ์ปฌ๋ผ์ ๋ฐ๋์ ์ธ๋ฑ์ค๊ฐ ์ ์ ํ ์ค์ ๋์ด์ผํจ
SELECT
<์ปฌ๋ผ ๋ชฉ๋ก>,
LEVEL
FROM
<ํ
์ด๋ธ ์ด๋ฆ>
START WITH
<๋ฃจํธ ์กฐ๊ฑด>
CONNECT BY PRIOR
<์์-ํ์ ๊ด๊ณ ์กฐ๊ฑด>
SELECT LPAD(ename,LEVEL*4,'*') "ENAME"
FROM emp
CONNECT BY PRIOP empno = mgr
START WITH empno = 7839;
[๊ณ์ธตํ ์ฟผ๋ฆฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ]
- SELECT: ์ถ๋ ฅํ ์ปฌ๋ผ์ ์ง์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๊ณ์ธต ๋ ๋ฒจ์ ํ์ํ๊ธฐ ์ํด LEVEL ๊ฐ์ ์ปฌ๋ผ์ ํฌํจํ ์ ์์ต๋๋ค.
- FROM: ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ํ ์ด๋ธ์ ์ง์ ํฉ๋๋ค.
- START WITH: ๊ณ์ธต ๊ตฌ์กฐ์ ์์์ ์ ์ ์ํ๋ ์กฐ๊ฑด์ ๋๋ค. ์ฃผ๋ก ๋ฃจํธ ๋ ธ๋์ ์กฐ๊ฑด์ ์ง์ ํฉ๋๋ค.
- CONNECT BY PRIOR: ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ์กฐ๊ฑด์ ๋๋ค. PRIOR ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํญ๋ชฉ์ ์ฐธ์กฐํฉ๋๋ค.
[๊ณ์ธต ๊ตฌ์กฐ์์ ์ผ๋ถ๋ถ๋ง ๊ณ์ธตํ ํ๊ธฐ]
[CONNECT_BY_ISLEAF()]
[CONNECT_BY_ROOT]