์๋ ํ์ธ์ yunamom ์ ๋๋ค :D
์ด๋ฒ ํฌ์คํ ์์๋ Oracle10g ๋ถํฐ CONNECT BY ์ ์์ ์ ๊ณตํ๋ ๊ณ์ธตํ ์ฟผ๋ฆฌ์ ๋ํ์ฌ ์์๋ณด๊ฒ ์ต๋๋ค ๐ฉ๐ป๐ป
๊ณ์ธตํ ์ฟผ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
ํ ํ ์ด๋ธ์ ๋ด๊ฒจ ์๋ ์ฌ๋ฌ ๋ ์ฝ๋๋ค์ด ์๋ก ์ํ ๊ด๊ณ(๋ถ๋ชจ, ์์) ๊ด๊ณ๋ฅผ ์ด๋ฃจ๋ฉฐ ์กด์ฌํ ๋,
์ด ๊ด๊ณ์ ๋ฐ๋ผ ๋ ์ฝ๋๋ฅผ hierarchical(์ํ์) ํ ๊ตฌ์กฐ๋ก ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ๋๋ SQL์ ์๋ฏธํฉ๋๋ค.
๊ตฌ๋ถ | ์ค๋ช |
LEVEL | - ํ์ฌ ํ
์ด๋ธ์๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ผ - ์ค๋ผํด์ ๋ชจ๋ SQL์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๋ก ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฒ์งธ ๋จ๊ณ์ด๋๋ฅผ ์๋ฏธํจ |
START WITH | - ์ด๋๋ถํฐ ์์ํ ๊ฒ์ธ์ง๋ฅผ ์ ํจ ( ์ต์์ ๋ ์ฝ๋ ) |
CONNECT BY PRIOR | - ๊ณ์ธต ๊ตฌ์กฐ์์ ๊ฐ ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ค์ - EMP ํ ์ด๋ธ์์ EMPNO, MGR ๊ฐ์ |
PRIOR | - ์ด๋๋ถํฐ ์์ํ ๊ฒ์ธ์ง๋ฅผ ์ ํด ์ค๋ค. |
โจSTART WITH
- ๊ณ์ธต ์ง์์ ๋ฃจํธ(๋ถ๋ชจํ)๋ก ์ฌ์ฉ๋ ํ์ ์ง์ ํ๋ค.
- ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
START WITH ๊ตฌ๋ฌธ์์๋ ์ด๋ค ๋ ์ฝ๋๋ฅผ ์ต์์ ๋ ์ฝ๋๋ก ์ก์์ง ์ง์ ํ๋ค.
โจCONNECT_BY_ROOT
๊ณ์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์์ LEVEL์ด 0์ธ ์ต์์ ๋ก์ฐ์ ์ ๋ณด๋ฅผ ์ป์ด ์ฌ ์ ์์ต๋๋ค.
-PRIOR์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ณ์ธต๊ตฌ์กฐ๋ก ํํํ ์ ์์ต๋๋ค.
-CONNECT BY PRIOR์์์ปฌ๋ผ = ๋ถ๋ชจ์ปฌ๋ผ : ๋ถ๋ชจ์์ ์์์ผ๋ก ํธ๋ฆฌ ๊ตฌ์ฑ (Top Down)
-CONNECT BY PRIOR๋ถ๋ชจ์ปฌ๋ผ = ์์์ปฌ๋ผ : ์์์์ ๋ถ๋ชจ๋ก ํธ๋ฆฌ ๊ตฌ์ฑ (Bottom Up)
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
CONNECT_BY_ROOT empno "Root empno", level
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;
ENAME EMPNO Root empno LEVEL
------------------ ------- ----------- -------
KING 7839 7839 1
JONES 7566 7839 2
SCOTT 7788 7839 3
ADAMS 7876 7839 4
FORD 7902 7839 3
SMITH 7369 7839 4
โจCONNECT_BY_ISLEAF
๊ณ์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์์ ๋ก์ฐ์ ์ตํ์ ๋ ๋ฒจ(Leaf) ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. ์ตํ์ ๋ ๋ฒจ์ด๋ฉด 1, ์๋๋ฉด 0
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
CONNECT_BY_ISLEAF "leaf", level
FROM emp
START WITH job='PRESIDENT'
CONNECT BY NOCYCLE PRIOR empno=mgr;
ENAME EMPNO leaf LEVEL
-------------------- ---------- ---------- ----------
KING 7839 0 1
JONES 7566 0 2
SCOTT 7788 0 3
ADAMS 7876 1 4
FORD 7902 1 3
BLAKE 7698 0 2
MARTIN 7654 1 3
TURNER 7844 1 3
JAMES 7900 1 3
CLARK 7782 0 2
MILLER 7934 1 3
โจSYS_CONNECT_BY_PATH
๊ณ์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์์ ํ์ฌ ๋ก์ฐ ๊น์ง์ PATH ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ์ ์์ต๋๋ค.
-- ์ฌ์ด์ฆ์กฐ์
COL PATH FORMAT A40
-- SYS_CONNECT_BY_PATH ์์
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,
SYS_CONNECT_BY_PATH(ename, '/') "PATH"
FROM emp
START WITH job='PRESIDENT'
CONNECT BY PRIOR empno=mgr;
ENAME EMPNO PATH
-------------------- ---------- ---------------------------
KING 7839 /KING
JONES 7566 /KING/JONES
SCOTT 7788 /KING/JONES/SCOTT
ADAMS 7876 /KING/JONES/SCOTT/ADAMS
FORD 7902 /KING/JONES/FORD
BLAKE 7698 /KING/BLAKE
MARTIN 7654 /KING/BLAKE/MARTIN
TURNER 7844 /KING/BLAKE/TURNER
JAMES 7900 /KING/BLAKE/JAMES
CLARK 7782 /KING/CLARK
MILLER 7934 /KING/CLARK/MILLER
Leaf Node(์ตํ์, ๋งจ ๋ง์ง๋ง ๋) ์ ์ ์ฒด PATH ์ ๋ณด๋ฅผ ์ถ๋ ฅ
SELECT LEVEL, SUBSTR(SYS_CONNECT_BY_PATH(ename, ','), 2) path
FROM emp
WHERE CONNECT_BY_ISLEAF = 1
START WITH mgr IS NULL
CONNECT BY PRIOR empno = mgr;
LEVEL PATH
--------- -------------------------
4 KING,JONES,SCOTT,ADAMS
3 KING,JONES,FORD
3 KING,BLAKE,MARTIN
3 KING,BLAKE,TURNER
3 KING,BLAKE,JAMES
3 KING,CLARK,MILLER
โจORDER SIBLINGS BY
๊ณ์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์์ ์๊ด๊ด๊ณ๋ฅผ ์ ์งํ๋ฉด์ ์ ๋ ฌ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
COL ename FORMAT A25
COL ename2 FORMAT A10
-- ORDER SIBLINGS BY ์
-- ์ ๋ ฌ์ด ์ ์์ ์ผ๋ก ์ํ๋ ๊ฒ์ ํ์ธ
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename,
ename ename2, empno, level
FROM emp
START WITH job='PRESIDENT'
CONNECT BY NOCYCLE PRIOR empno=mgr
ORDER SIBLINGS BY ename2;
ENAME ENAME2 EMPNO LEVEL
-------------------- ---------- ---------- ----------
KING KING 7839 1
BLAKE BLAKE 7698 2
JAMES JAMES 7900 3
MARTIN MARTIN 7654 3
TURNER TURNER 7844 3
CLARK CLARK 7782 2
MILLER MILLER 7934 3
JONES JONES 7566 2
FORD FORD 7902 3
SCOTT SCOTT 7788 3
ADAMS ADAMS 7876 4
-- ORDER BY ์
-- ์ ๋ ฌ์ด ์ด์ํ๊ฒ ์ํ๋ ๊ฒ์ ํ์ธ
SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename,
ename ename2, empno, level
FROM emp
START WITH job='PRESIDENT'
CONNECT BY NOCYCLE PRIOR empno=mgr
ORDER BY ename2;
ENAME ENAME2 EMPNO LEVEL
-------------------- ---------- ---------- ----------
ADAMS ADAMS 7876 4
BLAKE BLAKE 7698 2
CLARK CLARK 7782 2
FORD FORD 7902 3
JAMES JAMES 7900 3
JONES JONES 7566 2
KING KING 7839 1
MARTIN MARTIN 7654 3
MILLER MILLER 7934 3
SCOTT SCOTT 7788 3
TURNER TURNER 7844 3
์ฐธ๊ณ : http://www.gurubee.net/
'DB > Oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle] sqlplus Linesize, Pagesize, Column ์ฌ์ด์ฆ ์กฐ์ ํ๊ธฐ (0) | 2022.12.27 |
---|---|
[Oracle] ํน์๋ฌธ์ ๊ฒ์ - ESCAPE ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (0) | 2022.10.01 |
[Oracle] LPAD, RPAD ํจ์ ์ฌ์ฉ๋ฒ (0) | 2022.04.28 |
[Oracle] GRANT(๊ถํ๋ถ์ฌ) / REVOKE (๊ถํํ์) (0) | 2022.04.26 |
[Oracle] IN, NOT IN ํน์ ๋ฐ์ดํฐ ํฌํจ/์ ์ธ ํ๊ธฐ (0) | 2022.04.15 |