Oracle 채번 5, 10사이에 있는 행의 사번 조회, 계층구조 전개 출력, LPAD 출력
21 TEMP의 자료에서 ROWNUM을 채취해 값이 5와 10 사이에 있는 행의 ROWNUM, 사번, 이름을 조회하시오
SELECT NUM, EMP_ID, EMP_NAME
FROM ( SELECT ROWNUM NUM, EMP_ID, EMP_NAME FROM TEMP)
WHERE NUM > 4 AND NUM <11
22
INSERT INTO TDEPT ( DEPT_CODE, DEPT_NAME, PARENT_DEPT, USE_YN, AREA, BOSS_ID ) VALUE
(‘000000’, ‘사장실’, ‘ ’, ‘Y’, ‘서울’, ‘ ’)
위의 구문을 COMMIT 하고
기존 테이블에 최상위 부서로 지정되어있는 경영지원 부서를 사장실로 변경한다
UPDATE TDEPT
SET PARENT_DEPT = '000000'
WHERE DEPT_CODE=PARENT_DEPT;
23 사장실을 기준으로 계층구조 전개를 하여 출력하시오 (LPAD를 활용)
SELECT LPAD(DEPT_NAME, LEVEL*12,' ')AS 부서이름
,DEPT_CODE
,PARENT_DEPT
FROM TDEPT
START WITH DEPT_CODE='000000'
CONNECT BY PRIOR DEPT_CODE=PARENT_DEPT
24 CA0001의 하위 부서를 모두 제거 하고 계층구조 전개를 하여 출력하시오 (LPAD를 활용)
SELECT LPAD(DEPT_NAME, LEVEL*12,' ')AS 부서이름, DEPT_CODE, PARENT_DEPT
FROM TDEPT
CONNECT BY PRIOR DEPT_CODE=PARENT_DEPT
AND DEPT_CODE <> ‘CA0001’
START WITH DEPT_CODE='000000'
CONNECT 와 조건절의 순서를 어디에 배치하는가에 따라 그 느낌도 구조도 달라진다
"CONNECT BY PRIOR DEPT_CODE=PARENT_DEPT"
-> 왼쪽의 구문은 CONNECT가 일어나고 그다음
"AND DEPT_CODE <> ‘CA0001’"
-> CONNECT에 대한 조건절을 하나 더 추가하는 느낌으로 CONNECT가 생성이되고 나서 조건절에 대한 계층에 의미를 부여한다 그래서 CA0001에 해당하는 하위부서 까지 모두 제거된다
============================================================================
SELECT LPAD(DEPT_NAME, LEVEL*12,' ')AS 부서이름, DEPT_CODE, PARENT_DEPT
FROM TDEPT
WHERE DEPT_CODE <> ‘CA0001’
CONNECT BY PRIOR DEPT_CODE=PARENT_DEPT
START WITH DEPT_CODE='000000'
테이블의 조건절로 사용되며 테이블에서 먼저 CA0001을 제거한 후
WHERE DEPT_CODE <> ‘CA0001’
-> CONNECT를 실시하게 된다 그래서 CA0001만 없어지고
CONNECT BY PRIOR DEPT_CODE=PARENT_DEPT
-> CA0001의 하위부서는 그대로 남겨지게된다
25 어느 한 사원이 영업2(CD0001)부서에 근무하고 있다 자기의 상위 부서를 출력하시오
(계층구조 전개로출력)
SELECT LEVEL, LPAD(DEPT_NAME, LEVEL*12,' ') AS 부서이름 ,DEPT_CODE ,PARENT_DEPT
FROM TDEPT
START WITH DEPT_CODE = 'CD0001'
CONNECT BY PRIOR PARENT_DEPT=DEPT_CODE
26 부서별로 부서장(BOSS_ID)과 성명(EMP_ID)를 부서의 전개에 의해 도출된 결과와 같은 형식으로 출력하시오
SELECT A.LEV, A.EMP_NAME, B.BOSS, B.DEPT_CODE, B.DEPT_NAME
FROM TEMP A,
(SELECT LEVEL LEV, LPAD(BOSS_ID, LEVEL*12,' ') BOSS
,DEPT_CODE, DEPT_NAME
FROM TDEPT
START WITH DEPT_CODE = '000000'
CONNECT BY PRIOR DEPT_CODE= PARENT_DEPT
) B
WHERE A.EMP_ID(+)=B.BOSS