Springboot

쿼리조인과 스칼라 서브 쿼리

25G 2021. 12. 24. 11:30

현재 이지업에 강의를 보면서 진행하는 프로젝트에서 사용자의 구동 적보를 관리하는 기능이 있다.

 

이기능은 까다로워서 프로그램을 설계해서 짜게되면 프로그램도 지저분해지고 엄청 복잡해 진다. 그래서 이런 복잡한 기능은 쿼리를 잘 짠다면 엄청깔끔하게  프로그램을 작성할 수 있게된다.

쿼리를 짜는 실력이 늘기위해선 해당 포스팅에서 보여주는것과 같이 생각을하면서 점차점차 목표하는 쿼리를 만들기위해서 생각하고 연습하고 노력해야한다.

다음과 같은데 위 기능이 구현하기 까다로운 이유는 user정보도 있고 구독여부 정보와 사용자와 중복 여부까지 체크를 해야 한다.

이렇게 하기 위해서 쿼리를 짜야한다.

 

조인을 해야하는데 조인은 다음과 같이 데이터를 검색해 준다.

 

2번을 구독하는 user들을검색

2번이 구독하고 있는 user들을 검색하는 쿼리를 짜고 이제 구독 여부를 확인하는 쿼리가 필요하다

구독여부를 확인하는 쿼리

위 두 가지 쿼리의 정보가 모두 필요하다.

가상컬럼으로 느낌을 잡고
스칼라쿼리

스칼라 서브 쿼리( 단일행을 리턴!!)
select절에 select가 한번 더 나오는 것을 스칼라 서브 쿼리라고 한다.

 

그럼 이제 무엇을 해야 할까  위 결과를 확인해서 u.id를 변수로 해서 구독여부를 확인해야 한다.

 

이제 구독여부를 체크하는 쿼리가 완성됐다. 그럼 마지막으로 동일 유저인지 판단하는 쿼리가 필요하다.

가상 칼럼으로 테스트를 해보면 2번이 로그인을 한 시나리오에서 2번 유저 또한 구독여부가 체크가 돼있다.

위와 같이 쿼리를 짜면 문제를 해결할 수 있다.

dto 만들어서 데이터 뿌리기만 하면 끝