[PostgreSQL] 쿼리 결과를 임시로 저장해서 사용하는 방법(with 절)

반복적으로 사용되는 쿼리를 임시로 저장해서 효율을 높여보자

With 절이란?

복잡한 쿼리를 작성하다 보면, 비슷한 쿼리를 여러 번 사용해야 할 때가 있다. 매번 똑같은 쿼리를 사용하면 실행 시간이 계속 늘어날 것 같고, 한 번만 실행하고 싶을 때가 있을 것이다.

이럴 때 필요한 것이 with 절이다. with 절은 select 쿼리를 실행하고 해당 결과를 임시로 저장해준다. 이러한 것들은 CTE(common table expression)라고 한다.

사용법

테이블 구조

create table user(
    id      integer     not null primary key,
    name    varchar(8)  not null,
    locale  varchar(8)  not null
)

select 쿼리

with temp_user as (
    select *
    from user
    where name like "fhdu%"
)
select *
from temp_user u1
    left join temp_user u2
        on u1.locale = u2.locale

temp_user에 결과를 저장해놓고 계속 불러와서 쓸 수 있게 도와준다.

with 절 여러 개 사용

with temp_user as (
    select *
    from user
    where name like "fhdu%"
), temp_user2 as (
    select *
    from user
    where name like "woo%" 
)
select *
from temp_user u1
    left join temp_user2 u2
        on u1.locale = u2.locale

위와 같이 ,기호로 하나의 쿼리에서 여러 개의 with 절을 사용할 수 있다.