티스토리 뷰

1.   계층형 질의

-       테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(Hierarchical Query)를 사용한다.

 

-       계층형 데이터란?

n  동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터.
ex)
사원 테이블에서는 사원들 사이에 상위 사원(관리자)과 하위 사원 관계가 존재하고 조직 테이블에서는 조직들 사이에 상위 조직과 하위 조직 관계가 존재.

n  엔티티를 순환관계 데이터 모델로 설계할 경우 계층형 데이터 발생

n  순환관계 데이터 모델
ex)
조직, 사원, 메뉴 등


가.  Oracle 계층형 질의

가상 칼럼

설명

LEVEL

루드 데이터이면 1, 그 하위 데이터이면 2이다. 리프(Leaf) 데이터까지 1씩 증가한다.

CONNECT_BY_ISLEAF

전개 과정에서 해당 데이터가 리프 데이터이면 1, 그렇지 않으면 0이다.

CONNECT_BY_ISCYCLE

전개 과정에서 자식을 갖는데, 해당 데이터가 조상으로서 존재하면 1, 그렇지 않으면 0이다. 여기서 조상이란 자신으로부터 루트까지의 경로에 존재하는 데이터를 말한다. CYCLE 옵션을 사용했을 때만 사용할 수 있다.

-       START WITH (엑세스)
계층 구조 전개의 시작 위치를 지정하는 구문.
, 루트 데이터 지정

-       CONNECT BY (조인)
다음에 전개될 자식 데이터를 지정하는 구문.
자식 데이터는 CONNECT BY절에 주어진 조건 만족

-       PRIOR
CONNECT BY절에 사용되며, 현재 읽은 칼럼 지정
* PRIOR
자식 = 부모형태시, 자식 데이터에서 부모 데이터(자식->부모)방향으로 전재하는 순방향 전개
* PRIOR
부모 = 자식형태시, 부모 데이터에서 자식 데이터(부모->자식)방향으로 전개하는 역방향 전개

-       NOCYCLE
데이터 전개시, 이미 나타났던 동일한 데이터가 전개 중에 다시 나타난다면 이것을 사이클(Cycle)형성이라 한다.
사이클이 발생한 데이터는 런타임 오류 발생

n  NOCYCLE 추가 : 사이클이 발생한 이후의 데이터는 전개하지 않음
- ORDER SIBLINGS BY :
형제 노드(동일 LEVLEL) 사이에서 정렬 수행
- WHERE :
모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출(필터링)

함수

설명

SYS_CONNECT_BY_PATH

루트 데이터부터 현재 전개할 데이터까지의 경로를 표시한다.

사용법 : SYS_CONNECT_BY_PATH(칼럼, 경로분리자)

CONNECT_BY_ROOW

현재 전개할 데이터의 루트 데이터를 표시한다. 단항 연산자이다.

사용법 : CONNECT_BY_ROOT 칼럼

 

나.  SQL Server 계층형 질의

-       SQL Server 2000 버전까지는 계층형 질의를 작성할 수 있는 문법을 지원하지 않았다.

-       조직도 처럼 계층적 구조를 가진 데이터는 저장 프로시저를 재귀 호출하거나 while 루프 문에서 임시 테이블을 사용하는 등 (순수한 쿼리가 아닌) 프로그램 방식으로 전개하였다.

-       SQL Server 2005 버전부터는 하나의 질의로 원하는 결과를 얻을 수 있게 되었다.

 

2.   셀프 조인

-       셀프 조인(Self Join)이란 동일 테이블 사이의 조인을 말한다.
FROM
절에 동일 테이블이 두 번 이상 나타난다.

-       동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 

 식별을 위해 반드시 테이블 별칭(Alias) 사용한다.

-       칼럼에도 모두 테이블 별칭을 사용해서 어느 테이블의 칼럼인지 식별한다.

-       이외 사항은 조인과 동일하다.

반응형
LIST

'자격증 > SQLD' 카테고리의 다른 글

SQLD - SQL 활용 [그룹 함수]  (0) 2017.08.16
SQLD - SQL 활용 [서브쿼리]  (0) 2017.08.14
SQLD - SQL 활용 [집합 연산자]  (0) 2017.08.14
SQLD - SQL 활용 [표준 조인]  (0) 2017.08.14
SQLD - SQL 기본 [조인(JOIN)]  (0) 2017.08.11
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함