Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 이것이자바다
  • SQLD합격후기
  • 연습문제
  • googlecolaboratory
  • Database
  • 독학후기
  • 비쥬얼스튜디오코드
  • 시작일종료일
  • SQLD합격
  • spring
  • 노마드코더
  • 창초기화
  • 콜라보레이토리
  • 코딩앙마
  • 서버등록
  • SQL
  • 파이썬온라인
  • AllArgsConstructor
  • HTML
  • sql기간
  • colaboratory
  • oracle
  • 백준
  • java
  • Eclipse
  • CSS
  • 기간쿼리
  • Javascript
  • 기간설정
  • 오류해결

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[63일차] 계층형 쿼리 / 계층형 쿼리 응용 / WITH 절 / 분석함수 와 window 함수
🏫 Open API_JAVA

[63일차] 계층형 쿼리 / 계층형 쿼리 응용 / WITH 절 / 분석함수 와 window 함수

2022. 10. 25. 18:47
728x90

20221024(월)

  • 목차 
    - 계층형 쿼리
    - 계층형 쿼리 응용
    - WITH 절
    - 분석함수 와 window 함수

 


< 계층형 쿼리 >

  • BOM(Bill Of Material) 이란?
    ➡ 하나의 완제품이 만들어지는데 필요한 구성품목들의 내역 혹은 조합도를 말함.
         ex) 컴퓨터 구성도(BOM)
    SELECT expr1, expr2, ...
      FROM 테이블
     WHERE 조건
     START WITH[최상위 조건]
    CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건];
  • 데이터가 부모/자식/부모/자식 순으로 출력된다.


  • LEVEL 의사컬럼
    - DB 단에서 미리 탭여백을 줘서 넘길 것인지
    - 들여쓰기는 JS, Spring, DB에서 다 할 수 있다. 어디에서 할 건지 정할 수 있음.

  • 레벨에 따라 들여쓰기가 달라진다. 

 


  • 루트노드 : 트리 구조에서 부모가 없는 최상위 노드

       (1) 루트노드 데이터행이 출력시 포함되지 않게 만들기

       (2) 루트노드 데이터행이 출력시 포함되게 만들기

 


< 계층 쿼리 담당 정렬 명령어 >

(1) ORDER SIBLINGS BY

     일반정렬로 해도 오류는 나지 않음 (이렇게 사용되는 경우도 있단 의미!)

 


(2) CONNECT_BY_ROOT

     계층형 쿼리에서 최상위 로우를 반환하는 연산자

     연산자이므로 CONNECT_BY_ROOT 다음에는 표현식이 온다.

 


(3) CONNECT_BY_ISLEAF : 마지막노드이면(자식노드가 없는 경우)1, 아니면(자식있는 경우) 0
     해당 로우가 최하위 자식 로우이면 1을, 그렇지 않으면 0을 반환하는 의사 컬럼이다.

 


(4) SYS_CONNECT_BY_PATH (colm, char)

     루트 노드에서 시작해 자신의 행까지 연결된 경로 정보를 반환

     (*char은 컬럼 간 구분자를 의미)

 


(5) CONNECT_BY_ISCYCLE
     오라클의 계층형 쿼리는 루프(반복) 알고리즘을 사용
     루프 알고리즘에서 주의할 점은 조건을 잘못 주면 무한루프를 타게 된다는 점인데, 

     계층형 쿼리에서도 부모-자식 간의 관계를 정의하는 값이 잘못 입력되면 무한루프를 타고 오류가 발생한다.


     ex) 생산팀(170)의 부모 부서는 구매/생산부(30)인데, 구매/생산부(30)의 parent_id 값을 생산팀으로 바꾸면

           두 부서가 상호 참조가 되어 무한루프가 발생할 것이다. 

 


< 계층형 쿼리 응용 >

  • (1) 샘플 데이터 생성
    계층형 쿼리와 오라클에서 제공하는 DBMS_RANDOM이란 패키지 사용 ➡ 몇 만 건의 데이터 생성가능

  • (2) 로우를 컬럼으로 변환하기
    LISTAGG(expr, delimiter) WITHIN GROUP(ORDER BY 절)
    expr을 delimiter로 구분 ➡ 로우를 컬럼으로 변환해 조회하는 함수.
  • (3) 컬럼을 로우로 변환하기
    계층형 쿼리를 사용하면 쉽게 변환할 수 있다. 

< WITH 절 > - 개선된 서브 쿼리

  • 별칭으로 사용한 SELECT 문의 FROM 절에 다른 SELECT 구문의 별칭 참조가 가능
  • 쿼리가 훨씬 간단해지면서 동일한 결과가 조회된 것을 확인할 수 있다. 

  • 일반 서브 쿼리와 중복 구문이 필요 없는 WITH 절을 그림으로 나타내면 다음과 같다.

출처 : https://thebook.io/006696/part01/ch07/02/

 

 


< 분석함수 와 window 함수>

분석 함수 구문
분석 함수 (집계 함수에 속함) OVER 키워드 뒤에 위치한 분석 함수 절
AVG, SUM MAX, MIN, COUNT, CUM_DIST,
DENSE_RANK, PERCENT_RANK,
FRIST, LAST, LAG, LEAD, ROW_NUMBER
PARTITION BY : 계산될 대상 그룹 지정
ORDERED BY : 파티션 안에서의 순서 지정
WINDOW 절 : 더 상세한 그룹 분할 시 사용

 

728x90
저작자표시

'🏫 Open API_JAVA' 카테고리의 다른 글

[65일차] 예외처리 / 트랜잭션  (0) 2022.10.30
[64일차] PL/SQL(익명블록, 변수, 상수, DML, 제어문, 함수) / 프로시저  (0) 2022.10.25
[62일차] 서브 쿼리  (0) 2022.10.24
[61일차] 조인의 종류 / ANSI 내부 조인 / ANSI 외부 조인  (0) 2022.10.23
[60일차] 변환 함수 / NULL 관련 함수 / 기타 함수 / GROUP BY 절과 HAVING 절 / ROLLUP 절과 CUBE 절 / 집합 연산자  (0) 2022.10.21
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [65일차] 예외처리 / 트랜잭션
    • [64일차] PL/SQL(익명블록, 변수, 상수, DML, 제어문, 함수) / 프로시저
    • [62일차] 서브 쿼리
    • [61일차] 조인의 종류 / ANSI 내부 조인 / ANSI 외부 조인
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바