본문 바로가기
IT개발

SQL WITH절

by 팀모 2023. 8. 31.

1.WITH절이란?

서브쿼리를 이름을 정의해 만든 임시테이블
*참고 : Oracle9버전 이상부터 with절 지원

2. With절은 언제 사용하는지?

1) 서브쿼리 사용 시 가독성이 떨어지는 경우
보통 select문에서 서브쿼리를 많이 사용하게 되는데
서브쿼리가 길어거나 혹은 동일한 서브쿼리를 태울 때 with절을 용이하게 사용하실 수 있습니다.
간결한 서브쿼리를 작성한다면 문제가 없지만 서브쿼리가 길어지다보면 쿼리의 가독성도 떨어지게 되겠지요?
그럴때 WITH절로 쿼리를 분리시켜 임시테이블로 만든 후 From절에서 테이블처럼 사용할 수 있습니다.

2)동일한 데이터를 반복적으로 사용하는 경우
Sql내에서 동일한 데이터를 반복적으로 사용하는 경우 with절을 이용하기도 합니다.

3. With절 작성법

WITH [테이블명] AS(
   쿼리문
)


4. With절 작성예시

아래는 SAMPLE 테이블과, SAMPLE2 테이블을
각각 서브쿼리와 WITH절을 이용한 예시입니다.
[SAMPLE 테이블]

[SAMPLE2 테이블]


1) 서브쿼리를 이용한 예시
아래 예시는 테이블 SAMPLE, SAMPLE2를 FROM절 속에 서브쿼리를 사용한 예시입니다.
이렇게 From절 안에서 쓰이는 서브쿼리는 인라인뷰 라고도 합니다.


2) WITH 절을 이용한 예시
위에 서브쿼리를 이용해서 나왔던 쿼리를 똑같이 WITH절을 이용하여 만든 예시입니다.
WITH [사용명칭] AS (구문) 을 명시해놓고
아래 SELECT절의 FROM절에서
WITH절 사용명칭'S1'을 사용하는걸 보실 수 있습니다.

실전프로젝트에서 with절을 사용하면 얼마나 가독성이좋고 심플해지는지 느껴보세요
[실전예시]


5. WITH절 계층형쿼리예제


Oracle과 mariadb는
서브쿼리를 작성할 때 with절을 통해 사용할 수 있지만
재귀쿼리는 With recursive 절을 사용합니다.
그러므로 계층형 쿼리를 구현할 때 with recursive절을 사용해야합니다.
Tibero는 with recursive를 지원하지 않고
With절 하나로 서브쿼리와 재귀쿼리를 사용할 수 있습니다.
그러므로 계층형쿼리를 만들때에는 사용하고 있는 db가 어떤것인지 확인하고 그에 맞게 사용해야 겠지요.



1) WITH RECURSIVE 절을 이용한 계층형 쿼리(Oracle, MariaDB)


2) WITH 절을 이용한 계층형 쿼리 (Tibero)