본문 바로가기
프로그래밍/데이터베이스

[SQL 기초 - 18장] 오라클 SQL 계층형 쿼리

by 잡학다방 2024. 12. 27.
반응형

안녕하세요!

 

오늘은 계층형 서브쿼리를 배워보겠습니다.

그 전에 지난 시간 내용 복습하실 분들은

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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 이 같은 데이터를 찾아주는 역할을 합니다.

간혹 PRIORCONNECT BY 를 한 쌍으로 아시는 분들이 있는데

그럴 필요 없습니다!!!

실습

그럼 실습 하나 해보겠습니다.

위와 같은 테이블이 있습니다.

(제가 드린 테이블 정보에 dept_h 라는 테이블 입니다!)

dept_h 테이블을 이용하여

위와 같은 결과를 조회하려면 어떻게 해야 할까요?

이 처럼 작성하면 되지 않을까요?!

CONNECT BY 로 연결할 부분만 잘 찾아 주신다면 문제 없을거에요!

오늘은 내용이 짧네요!!

점점 SQL 의 기본의 끝을 향해 가고 있는거 같습니다.

마지막까지 열심히 해요!

오늘도 끝까지 봐주셔서 감사합니다!

다음에봐요!!

반응형