본문 바로가기

SQL

[Oracle] 계층검색

계층검색(hierarchical query)

하향식 방식(top-down)

start with —시작점, 시작해야할 조건을 생성
connect by prior; —연결고리 조건

select employee_id, manager_id
from employees
start with employee_id=101
connect by prior employee_id=manager_id;
                 —————————————>

⇒ 사원번호 101번을 매니저 번호로 갖고 있는 사람을 찾고,

그 사원의 번호를 매니저번호로 갖고 있는 사람을 찾음.

연쇄적으로 찾음. 자식을 먼저 찾고 없으면 그 다음에 형제를 찾음.

 

상향식 방식(bottom up)

start with — 시작점, 시작해야할 조건을 생성

connect by ... prior; —연결고리 조건

select employee_id, manager_id
from employees
start with employee_id=101
connect by employee_id= prior manager_id;
                 <—————————————
select level, lpad(' ',2*level-2,' ') || last_name --계층 구분
from employees
where employee <> 101 --101번 사원만 제외 , 특정한 행만 제외
order siblings by --계층 검색된 내용을 정렬할 때 사용. 위치표기법은 사용할 수 없음.
and employee_id != 101 ; --101번 사원 조직을 전부 제거, 분기 제거

[문제89] select문을 이용해서 1~100 출력해주세요.

select level
from dual
connect by level <= 100;

[문제90] select문을 이용해서 2단을 출력해주세요.

2단

2 * 1 = 2

2 * 2 = 4

...

2 * 9 = 18

select '2 * ' || level || ' = ' || 2*level as "2단"
from dual
connect by level <= 9;

[문제91] select문을 이용해서 2단~9단까지 출력해주세요.

select '2 * ' || level || ' = ' || 2level as "2단",
       '3 * ' || level || ' = ' || 3level as "3단",
       '4 * ' || level || ' = ' || 4level as "4단",
       '5 * ' || level || ' = ' || 5level as "5단",
       '6 * ' || level || ' = ' || 6level as "6단",
       '7 * ' || level || ' = ' || 7level as "7단",
       '8 * ' || level || ' = ' || 8level as "8단",
       '9 * ' || level || ' = ' || 9level as "9단"
from dual
connect by level <= 9;

select dan || ' * ' || num || ' = ' || dan*num 구구단
from (select level+1 dan
      from dual
      connect by level <=8),
      (select level num
       from dual
       connect by level <=9);
Recent Posts
Popular Posts
Recent Comments