728x90

 

[관련] 개념 설명

https://rise-up.tistory.com/719

 

계층형 쿼리(Hierarchical Query) 동작순서 + 설명

 

SQLD 자격검정 실전문제 P95/89

1.START WITH 라인을 먼저 뽑아냄

→ 001 홍길동,005이병헌

 

2.ORDERBY절

1번에서 뽑아낸 걸 오더바이절 조건대로 다시 정렬

 

3.CONNECT BY PRIOR

이전(PRIOR) 사원번호가 매니저사원번호인 ROW(행)을 찾아라

사원번호 = 매니저번호 조건에서 이전 사원번호가 001 홍길동이었으므로, 매니저사원번호가 001인 것들을 추려냄

 

4.AND 입사일자 BETWEEN ‘2013-01-01’ AND ‘2013-12-31’

입사일자 날짜 조건을 줘서 한번 걸러내므로 강감찬 탈락

003 이순신, 004 이민정만 추가

 

5.ORDER SIBLINGS BY

사원번호로 정렬

001 003 004 005 정렬이 맞으므로 순서 변화X

 

 

6.여기까지해서 또 계층 내려갈게 있는지 확인하려면, 매니저사원번호가 003,004인게 있는지 봐야한다

없으므로 내려갈 계층 더 없음. 이 계층은 여기서 끝

 

7.CONNECT BY PRIOR 사원번호 = 매니저사원번호

005 이병헌에서 매니저사원번호가 005인 ROW(행)을 찾아야한다

006,007,008이 존재함

 

 

8. AND 입사일자 BETWEEN ‘2013-01-01’ AND ‘2013-12-31’

AND의 입사일자 조건에 006,007,008 전부안맞아서 추가되는거 없음

 

9.결과값 도출

 

※만약 여기서 DESC로 정렬하고 싶으면 결과는?

DESC로 정렬하면 레벨1부터 정렬을 다시 해줘야하니 005가 맨 앞

다음 레벨2인 004가 003 위로가게됨

 

 

자료출처

https://www.youtube.com/watch?v=boNut__USIU&list=PLyQR2NzLKOCZU_jjLAdebyx9oE9dvvsrE&index=9 

https://www.youtube.com/watch?v=U4MlOLK2E9M&list=PLyQR2NzLKOCZU_jjLAdebyx9oE9dvvsrE&index=10 

https://yunamom.tistory.com/269?category=1006373#answer2

728x90
반응형
728x90

 

[관련]내부로직순서 및 예시

https://rise-up.tistory.com/722

 

계층형 구조(Hierarchical Structure)

부모와 자식 간의 관계를 깊이로 구분하여 표현하는 것으로 상하 수직관계의 트리형태의 구조

보통 카테고리를 분류나 조직도에 많이 사용

 

출처: https://m.blog.naver.com/javaking75/220010288704?view=img_2

 

용어

노드(node) : 위 그림에서 원모양으로 표시된 항목. 각각의 품목이 하나의 노드가 되며 실제 테이블에서는 하나의 로우가 노드

부모(parent) : 부모노드라고도 하며, 트리구조에서 상위에 있는 노드를 의미

자식(child) : 자식노드라고도 하며, 위 그림에서 '모니터'는 컴퓨터의 자식노드이며, 컴퓨터는 모니터와 본체의 부모노드임

리프(leaf) : 리프노드하며, 더이상 하위에 연결된 노드가 없는 최하위 항목을 의미. 즉 자식노드가 없는 노드 (ex : 모니터, 프린터, 랜카드)

루트(root) : 계층형, 트리구조에서 최상위에 있는 노드(ex: 컴퓨터)

레벨(level) : 트리구조에서의 각각의 계층을 의미

루트인 컴퓨터가 1레벨, 순차적으로 그 하위에 있는 모니터, 본체, 프린터가 2레벨, 그 아래가 메인보드, 랜카드가 3레벨이자 리프(leaf)

 

 

 

수행순서

1. START WITH 절에 시작 조건을 찾습니다.

2. CONNECT BY 절에 연결조건을 찾습니다.

 

 

START WITH

어떤 레코드를 최상위로 잡을지 지정

계층 구조 전개의 시작 위치를 지정하는 구문

 

CONNECT BY

부모,자식 관계를 지정

다음에 전개될 자식 데이터를 지정하는 구문

자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 한다.(조인)

 

PRIOR

‘이전’이라는 의미

위의 start with에서 정한 계층구조 시작위치 구문에서 나온 row에서의 값과 PRIOR에 기준점으로 잡은 컬럼과 같은 값을 추출한다

CONNECT BY절에 사용되며, 현재 읽은 칼럼을 지정

PRIOR 자식 = 부모 형태를 사용하면,

계층구조에서 자식 데이터에서 부모 데이터(자식 → 부모) 방향으로 전개하는 순방향 전개

PRIOR 부모 = 자식 형태를 사용하면,

반대로 부모 데이터에서 자식 데이터(부모 → 자식) 방향으로 전개하는 역방향 전개

 

 

자료출처
https://www.youtube.com/watch?v=boNut__USIU&list=PLyQR2NzLKOCZU_jjLAdebyx9oE9dvvsrE&index=10

728x90
반응형
728x90

 

db연결할 때 드라이버, 주소, sql 로그인 아이디, 비번 등

그리고 쿼리문을

코드 내부에 통합해서 작성할 수도 있지만,

외부 파일에 모아서 한번에 해결 가능하다 

 

이때 사용하는 자바 클래스 Properties

외부파일 확장자도 .properties이다

ex) sqlDriver.properties

어디서든 접근할 수 있게 선언은 필드로 한다

 

Dynamic Web프로젝트 파일에서의 Properties클래스 선언 및 외부파일 경로 지정

// 외부파일 로드용 클래스 Properties 선언
Properties prop = new Properties();

// 외부 파일 경로지정
public NoticeDAO() {
    String fileName = NoticeDAO.class.getResource("/sql/notice/notice-query.properties").getPath();

    try {
        prop.load(new FileReader(fileName));
    }catch(FileNotFoundException e) {
        e.printStackTrace();
    }catch(IOException e) {
        e.printStackTrace();
    }
}

 

쿼리문 사용 방법 예시

String query = prop.getProperty("selectList");

	public ArrayList<Notice> selectList(Connection conn) {
		// 고정값(공지사항)을 조회하는 거기에 Statement 사용
		Statement stmt = null;
		ResultSet rset = null;
		ArrayList<Notice> list = new ArrayList<>();
		
		String query = prop.getProperty("selectList");
        ...

 

드라이버 세팅 외부파일 처리

 

 

 

 

 

 

728x90
반응형

+ Recent posts