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 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

조인 테이블에 대한 계층 질의

테이블 조인 조건식

SELECT 문에서 대상 테이블이 조인된 경우, WHERE 절에는 검색 조건식 외에 테이블 조인 조건을 포함할 수 있다. 이때, CUBRID는 제일 먼저 WHERE 절의 조인 조건을 적용하여 테이블 조인 연산을 수행한 후, CONNECT BY 절의 조건식을 적용하고, 마지막으로 WHERE 절 내의 나머지 검색 조건식을 적용하여 연산을 처리한다.

WHERE 절 내에 조인 조건식과 검색 조건식을 함께 명시하는 경우, 내부적으로 조인 조건식이 검색 조건식으로 분류되어 의도하지 않게 연산 순서가 달라질 수 있으므로, WHERE 절보다는 FROM 절 내에 테이블 조인 조건을 명시하는 것을 권장한다.

계층 질의 결과

조인 테이블에 대한 계층 질의 결과는 START WITH 절의 조건식에 따라 루트 행으로부터 출력된다. 만약 START WITH 절이 생략되면 조인된 테이블의 모든 행들을 루트 행으로 간주하여 계층 관계를 출력한다. 이를 위해 CUBRID는 하나의 루트 행에 대하여 모든 자식 행을 검색한 후, 각 자식 행 하위에 속하는 모든 자식 행을 재귀적으로 검색한다. 이러한 검색은 더 이상의 자식 행이 발견되지 않을 때까지 반복된다.

또한, 계층 질의문은 CONNECT BY 절의 조건식을 먼저 적용하여 결과 행들을 검색한 후, WHERE 절에 명시된 검색 조건식을 적용하여 최종 결과 행들을 출력한다.

예제

다음은 두 개의 조인된 테이블에 대하여 계층 질의문을 수행하는 예제이다.

-- tree2 테이블을 생성하고 데이터를 삽입하기

CREATE TABLE tree2(id int, treeid int, job varchar(32));

 

INSERT INTO tree2 VALUES(1,1,'Partner');

INSERT INTO tree2 VALUES(2,2,'Partner');

INSERT INTO tree2 VALUES(3,3,'Developer');

INSERT INTO tree2 VALUES(4,4,'Developer');

INSERT INTO tree2 VALUES(5,5,'Sales Exec.');

INSERT INTO tree2 VALUES(6,6,'Sales Exec.');

INSERT INTO tree2 VALUES(7,7,'Assistant');

INSERT INTO tree2 VALUES(8,null,'Secretary');

 

-- 조인 테이블에 대해 계층 질의문을 수행하기

SELECT t.id,t.name,t2.job,level

    FROM tree t

        inner join tree2 t2 on t.id=t2.treeid

    START WITH t.mgrid is null

    CONNECT BY prior t.id=t.mgrid

    ORDER BY t.id;

 

id  name        job     level

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

1   Kim         Partner     1

2   Moy         Partner     1

3   Jonas       Developer   2

4   Smith       Developer   2

5   Verma       Sales Exec. 2

6   Foster      Sales Exec. 2

7   Brown       Assistant   3