[ ๊ณ์ธตํ ์ฟผ๋ฆฌ ]
์ํ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ ์ํ ๊ด๊ณ๋ฅผ ํ์ํ ๋ ์ฌ์ฉํ๋ ๊ฒ
๊ณ์ธต ๊ด๊ณ๊ฐ ๋ณด์ด๊ฒ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ
[๊ณ์ธตํ ์ฟผ๋ฆฌ ๋ฌธ๋ฒ]
- 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]