안녕하세요!
오늘은 계층형 서브쿼리를 배워보겠습니다.
그 전에 지난 시간 내용 복습하실 분들은
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
WITH
WITH 로 시작 하겠습니다.
WITH 는 사실상 많이 사용하지는 않습니다.
가볍게 개념 설명하고 예시 한 가지 들고 넘어가겠습니다.
쿼리 블럭을 생성하고 같이 실행되는 SQL 에서 해당 쿼리 블럭을 반복적으로 사용할 때
성능 향상 효과를 기대할 수 있습니다.
WITH 절에 기술된 쿼리 블럭은 메모리에 한번만 올리기 때문에 쿼리에서 반복적으로
사용하더라도 실제 데이터를 가져오는 작업은 한 번만 실행합니다.
하지만, 하나의 쿼리에서 동일한 서브쿼리가 반복적으로 사용 된다는 것은 쿼리를
잘못 작성할 가능성이 높다는 뜻으로, WITH 절로 해결하기 보다는 쿼리를 다른 방식으로
작성할 수 없는지 먼저 고려 해볼 것을 추천합니다.
회사의 DB를 다른 외부인에게 오픈할 수 없기 때문에 외부인에게 도움을 구하고자 할 때
테이블을 대신할 목적으로 많이 사용합니다.
위와 같이 작성하면
위와 같은 결과를 얻을 수 있습니다.
하나씩 작성해서 테이블을 만드는 것이죠.
CONNECT BY
위와 같은 형식의 데이터를 본 적이 있으실 겁니다.
저게 바로 계층형으로 데이터를 나눈 것인데요,
계층형 쿼리를 사용하여 저런 형식의 데이터를 만들 수 있습니다.
계층형 데이터를 만들 때 사용하는 것은
CONNECT BY 라는 녀석입니다.
위쪽 데이터의 쿼리 입니다.
LEVEL 은 계층형 쿼리를 작성할 때 사용할 수 있는 컬럼 입니다.
데이터들의 순서(?) 를 나타내줍니다.
SELECT 절부터 분석해보면
LPAD 는 지난번에 배웠던 문자열 함수 입니다.
' ' 이라는 문자열을 (LEVEL - 1)*4 바이트 만큼
왼쪽에 나타내겠다는 것입니다.
그리고 ename 과 결합을 하는 것이죠.
저 것으로 들여 쓰기를 해서 계층형을 표현할 수 있는것입니다.
START WITH 는 시작점을 표현합니다.
위의 쿼리에서는 ename 이 KING 인 행을 시작점으로 하겠다는 것입니다.
CONNECT BY 는 계층형 쿼리를 작성할 때 필요한 것으로
계층을 표현할 때는 반드시 들어가야 합니다.
PRIOR 키워드는 현재 읽고 있는 행을 지칭하는 키워드 입니다.
따라서 위의 쿼리는 현재 읽고 있는 empno 와 mgr 이 같은 데이터를 찾아주는 역할을 합니다.
간혹 PRIOR 과 CONNECT BY 를 한 쌍으로 아시는 분들이 있는데
그럴 필요 없습니다!!!
실습
그럼 실습 하나 해보겠습니다.
위와 같은 테이블이 있습니다.
(제가 드린 테이블 정보에 dept_h 라는 테이블 입니다!)
dept_h 테이블을 이용하여
위와 같은 결과를 조회하려면 어떻게 해야 할까요?
이 처럼 작성하면 되지 않을까요?!
CONNECT BY 로 연결할 부분만 잘 찾아 주신다면 문제 없을거에요!
오늘은 내용이 짧네요!!
점점 SQL 의 기본의 끝을 향해 가고 있는거 같습니다.
마지막까지 열심히 해요!
오늘도 끝까지 봐주셔서 감사합니다!
다음에봐요!!
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
[SQL 기초 - 17장] 오라클 SQL rollup(2), 확장된 GROUP BY, 서브쿼리 응용 (0) | 2024.12.26 |
---|---|
[SQL 기초 - 16장] 오라클 SQL multiple insert, merge, rollup(1) (0) | 2024.12.23 |
[SQL 기초 - 15장] 오라클 SQL 인덱스(2) (feat. 실행계획) (1) | 2024.12.20 |
[SQL 기초 - 14장] 오라클 뷰, view 사용 이유, 시퀀스, 인덱스(1) (1) | 2024.12.19 |
[SQL 기초 - 13장] 오라클 SQL 제약조건, ALTER (0) | 2024.12.18 |