본문 바로가기
자격증/SQLD

계층형 쿼리

by 새벽물망초 2022. 7. 28.

문제 1

id col1 col2 col3
A   1
B A 2
C A 3
D B 4

select count(*)

from T

where col3 <> 2

start with col3 = 4

connect by col1 = prior col2;

 

[풀이]

부모 = prior 자식 / prior 자식 = 부모, 자식과 같은 부모를 연결해라

부모 = prior 자식 이므로 col1이 부모, col2가 자식이므로

col2와 같은 col1을 연결해라

col3 = 4 부터 시작해라

      col1     col2    col3

lv1.                         4

lv2.  b         a           2

lv3.  a                      1

근데 col3<>2이므로 lv2. 를 제외함

select count(*) 하므로 답은 2

 

 

 

문제 2

c1 c2 c3
1   A
2 1 B
3 1 C
4 2 D

select c1, c2, c3

from T

connect by prior c1 = c2

start with c1 = 1

order sibling by c1 desc;

 

[풀이]

prior 자식 = 부모, 자식과 같은 부모연결

c1이 자식, c2가 부모, c1 = 1 시작

         c1          c2          c3

lv1.   1                          a

lv2.   2            1            b

         3            1            c           

lv3.   4             2            d

그런데 order sibling by c1 desc 이므로

         c1          c2          c3

lv1.   1                          a

lv2.   3            1            c     

         2            1            b     

lv3.   4             2            d

이와같이 lv2에서 c1 기준으로 desc 해준다

 

 

 

문제 3

c1 c2 c3
1   king
2 1 john
3 2 scott

select c3 from T

where c1 <> 2

connect by c1 = prior c2

start with c1 = 2;

 

부모 = prior 자식, 자식과 같은 부모 연결

c1 = 2 부터 시작, c1이 부모, c2가 자식

       c1       c2       c3

lv1.  2         1       john

lv2. 1                   king

 

 

 

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

제 46회 sqld 시험 결과  (0) 2022.09.23
집계함수  (0) 2022.07.29
delete, truncate, drop 차이  (0) 2022.07.29
엔터티, 속성  (0) 2022.07.29

댓글