Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 | 

계층 질의문에서 사용 가능한 의사 컬럼

LEVEL

LEVEL은 계층 질의 결과 행의 깊이 레벨(depth)을 나타내는 의사 컬럼(pseudo column)이다. 루트 노드의 LEVEL은 1이며, 하위 자식 노드의 LEVEL은 2가 된다.

LEVEL 의사 컬럼은 SELECT 문 내의 WHERE 절, ORDER BY 절, GROUP BY ... HAVING 절에서 사용 가능하며, 집계 함수를 이용하는 구문에서도 사용 가능하다.

다음은 노드의 레벨을 확인하기 위하여 LEVEL 값을 조회하는 예제이다.

-- LEVEL의 값을 확인하기

SELECT id, mgrid, name, LEVEL

    FROM tree

    WHERE LEVEL=2

    START WITH mgrid IS NULL

    CONNECT BY PRIOR id=mgrid

    ORDER BY id;

 

id  mgrid       name        level

=========================================

3   1       Jonas       2

4   1       Smith       2

5   2       Verma       2

6   2       Foster      2

CONNECT_BY_ISLEAF

CONNECT_BY_ISLEAF는 계층 질의 결과 행이 리프 노드(leaf node : 하위에 자식 노드를 가지지 않는 단말 노드)인지 가리키는 의사 컬럼이다. 계층 구조 하에서 현재 행이 리프 노드이면 1을 반환하고, 그렇지 않으면 0을 반환한다.

다음은 리프 노드를 확인하기 위하여 CONNECT_BY_ISLEAF 값을 조회하는 예제이다.

-- CONNECT_BY_ISLEAF의 값을 확인하기

SELECT id, mgrid, name, CONNECT_BY_ISLEAF

    FROM tree

    START WITH mgrid IS NULL

    CONNECT BY PRIOR id=mgrid

    ORDER BY id;

 

id  mgrid       name        connect_by_isleaf

===========================================================

1   null        Kim     0

2   null        Moy     0

3   1       Jonas       1

4   1       Smith       1

5   2       Verma       1

6   2       Foster      0

7   6       Brown       1

CONNECT_BY_ISCYCLE

CONNECT_BY_ISCYCLE은 계층 질의 결과 행이 루프를 발생시키는 행인지를 가리키는 의사 컬럼이다. 즉, 현재 행의 자식이 동시에 조상이 되어 루프를 발생시키는 경우 1을 반환하고, 그렇지 않으면 0을 반환한다.

CONNECT_BY_ISCYCLE 의사 컬럼은 SELECT 문 내의 WHERE 절, ORDER BY 절, GROUP BY ... HAVING 절에서 사용할 수 있으며, 집계 함수를 이용하는 구문에서도 사용 가능하다.

참고 CONNECT_BY_ISCYCLECONNECT BY 절에 NOCYCLE 키워드가 명시되는 경우에만 사용할 수 있다.

다음은 루프를 발생시키는 행을 확인하기 위해 CONNECT_BY_ISCYCE 값을 조회하는 예제이다.

-- CONNECT_BY_ISCYCLE의 값을 확인하기

SELECT id, mgrid, name, CONNECT_BY_ISCYCLE

    FROM tree_cycle

    START WITH name in ('Kim', 'Moy')

    CONNECT BY NOCYCLE PRIOR id=mgrid

    ORDER BY id;

 

id  mgrid       name        connect_by_iscycle

==========================================================

1   null        Kim     0

2   11      Moy     0

3   1       Jonas       0

4   1       Smith       0

5   3       Verma       0

6   3       Foster      0

7   4       Brown       0

8   4       Lin     0

9   2       Edwin       0

10  9       Audrey      0

11  10      Stone       1