다연이네

[days07] level 의사컬럼 본문

Oracle

[days07] level 의사컬럼

 다연  2020. 11. 6. 20:00
반응형

level : 계층적 질의문에서 검색된 결과에 대해 계층별로 레벨 번호 표시, 루트 노드는 1, 하위 레벨로 갈 수록 1씩 증가

 

형식

SELECT [LEVEL] {*,컬럼명 [alias],...}

FROM 테이블명

WHERE 조건

START WITH 조건

CONNECT BY [PRIOR 컬럼1명 비교연산자 컬럼2명] 또는 [컬럼1명 비교연산자 PRIOR 컬럼2명]

 

계층적 질의문은 조인문이나 뷰에서는 사용할 수 없으며, CONNECT BY 절에서는 서브쿼리 절을 포함할 수 없다.

 

SELECT empno,ename,mgr,LEVEL
FROM emp
START WITH mgr IS NULL --젤 상위에 있는 놈
CONNECT BY PRIOR empno=mgr;--자식=부모 top-down (부모=자식은 bottom-up)

mgr=7698인 BLAKE를 메니저로 둔 empno를 나열한 예

SELECT mgr,empno,ename,LEVEL
FROM emp
WHERE mgr = 7698
START WITH mgr IS NULL
CONNECT BY PRIOR empno=mgr; --자식-부모 top-down 방식

 

 

 

select lpad('ㄴ',(level-1)*3) || dname 조직도
        ,level
        ,sys_connect_by_path(dname, '/') 경로
        ,connect_by_root dname 루트
        ,connect_by_isleaf 자식없음1 --더이상 자식이 없으면 1
        --근데 얘네는 오라클에만 존재...
from tbl_level
--where dname!= '정보미디어학부' --가지제거하려하는데 이렇게 하는거 아님
start with deptno = 10
connect by prior deptno = college;-- and dname!= '정보미디어학부'; 이렇게해야 밑 가지들 다 제거

 

특정 년, 월의 모든 일 출력

select to_date(:ym,'yyyymm') + level -1
from dual
connect by level<=extract(day from last_day(to_date(:ym,'yyyymm'))) ; 

년을입력받아 1~12월 마지막 날짜 출력

select 
    level || '월'
    ,to_date(:year ||level ,'yyyymm') "1일"
    ,last_day(to_date(:year ||level ,'yyyymm')) 전체
    ,to_char( last_day(to_date(:year ||level ,'yyyymm')), 'dd') 날만
from dual
connect by level<=12 ; 

 

반응형

'Oracle' 카테고리의 다른 글

[days08] 서브쿼리  (0) 2020.11.09
[days07] 달력 그리기  (0) 2020.11.06
[days07] 오라클 data type(자료형)  (0) 2020.11.06
[days07] SQL - RANK, ROLL UP  (0) 2020.11.06
[days06] SQL function 이어서  (0) 2020.11.05
Comments