스프링부트 서브쿼리

2021. 2. 4. 03:06Spring Boot

반응형

기존 짜둔 쿼리들을 가지고 스프링부트에 적용시키려고 했다. 

기존 짜둔 쿼리에 서브쿼리를 굉장히 많이 썼는데 서브쿼리를 지양하라는 글을 봤다 

 

[Querydsl] 서브쿼리 사용하기

안녕하세요! 이번 시간에는 Querydsl에서의 Subquery 기본 가이드를 진행합니다. 개인적으로 ORM을 사용하며, 객체지향적으로 엔티티가 구성되어있으면 서브쿼리가 필요한 일은 거의 없다고 생각하

jojoldu.tistory.com

서브쿼리 대신,

1. join으로 해결할 수 없는지

2. 어플리케이션에서 처리할 수 없는지 

3. 쿼리를 나눠서 실행할 수 없는지 

를 고려하라고 한다. 

 

그래서 기존 짜놨던 서브쿼리를 조인으로 바꿔보려고한다!!

 

 

ex. 매장세부조회 매장정보조회 쿼리 

전)

select s.storeName, s.deliveryTime,
       concat(cast(FORMAT(s.deliveryFee, 0) as char), '원') as deliveryFee,
       concat(cast(FORMAT(s.minOrderCost, 0) as char), '원') as minOrderCost,
       (select ROUND(avg(reviewStar),1) as avg
        from Review
        where storeIdx=1
        group by storeIdx) as storeStar,
       (select count(*) from Review as r  where s.storeIdx=r.storeIdx and isDeleted='N') as reviewCount,
       s.isCheetah
from Store as s
where s.storeIdx=1 and s.isDeleted='N';

 

후)

select s.storeName, s.deliveryTime,
       concat(cast(FORMAT(s.deliveryFee, 0) as char), '원') as deliveryFee,
       concat(cast(FORMAT(s.minOrderCost, 0) as char), '원') as minOrderCost,
       ROUND(avg(r.reviewStar),1) as storeStar,
       count(*) as reviewCount,
       s.isCheetah
from Store as s
join Review as r on s.storeIdx=r.storeIdx
where s.storeIdx=1 and s.isDeleted='N'
group by s.storeIdx;
반응형