[SQL] WITH 구문

HEY! MIN·2024년 10월 24일

☑️ WITH 구문을 사용하면 테이블을 재사용 할 수 있어요!
WITH은 SQL 구문에서 사용되는 임시테이블(가상테이블)로 쿼리의 가독성 및 쿼리성능 향상을 위해 사용한다.|

특징&장점
✔️ 임시테이블의 개념을 가지며, 작성한 쿼리 내에서만 실행가능

✔️ 하나의 SQL 구문에서 여러개의 WITH 문 선언 가능

✔️ 하나의 테이블에 대한 여러 조회가 필요한 경우, WITH절 사용으로 1회 조회 및 선언하게 되어 그 가독성 및 쿼리성능이 높음

✔️ 복잡한 연산을 보다 효율적으로 처리
(JOIN, UNION 등의 결과를 WITH 문에 저장)

문법

WITH 임시테이블명 AS
(    SELECT 컬럼1, 컬럼2, 
     FROM 테이블명
)
SELECT 임시테이블에서 불러온 컬럼 중 필요한 컬럼 
FROM 임시테이블명

구문 활용 예시

# with 구문 활용 예시1 
with soso as  # with 뒤쪽에 임시테이블명 지정
(	select etc_str2, etc_str1, count(distinct game_actor_id)as actor_cnt 
	from basic.users
	group by etc_str2, etc_str1 # 임시테이블을 만들 때 활용할 테이블 
)
select *
from soso # WITH절에서 지정한 임시테이블명 

;
# with 구문 활용 예시2 - 경험치가 가장 많은 캐릭터 정보 조회하기 
with dodo as # with 뒤쪽에 임시테이블명 지정
(	select * 
	from basic.users
)
select *
from(	select max(exp)as maxexp
		from dodo
	)as a 
inner join
	(	select *
		from dodo
	)as b 
on a.maxexp=b.exp
;
# with 구문 활용 예시3 - 다중 with 구문  
with gogo as # 첫번째 with 절
(	select game_account_id, exp
	from basic.users 
	where `level` >50
),
hoho as # 두번째 with 절, with 구문은 처음 한번만 작성합니다. 
(	select distinct game_account_id, pay_amount, approved_at
	from basic.payment 
	where pay_type='CARD'
) # 이 부분에서 with 구문이 종료됩니다. 
select case when b.game_account_id is null then '결제x' else '결제o' end as gb
, count(distinct a.game_account_id)as accnt 
from gogo as a
left join hoho as b
on a.game_account_id=b.game_account_id
group by case when b.game_account_id is null then '결제x' else '결제o' end
;
profile
It's a, it's the Pleasure Shop

0개의 댓글