Programming-[Backend]/SQL

[TIL] 서브쿼리 - 여집합, 서브쿼리의 연결 고리 찾아서 해결

컴퓨터 탐험가 찰리 2022. 5. 8. 20:07
728x90
반응형

 

상황

 

여러 컬럼 중 한 컬럼의 특정값만 갖는 데이터를 구하고 싶은 상황이다. 예를 들어 아래 그림에서 code별로 address가 있는데, address가 150301이 없는 코드만 찾고 싶다면 어떻게 해야할까?

 

해결 방법

 

여집합 논리로 생각한다. 그리고 서브쿼리를 in절에 넣어서 해결한다.

 

 

select distinct b.code
from apple a
         inner join banana b on a.banana_id=b.id
         inner join cherry c on b.cherry_id = c.id
where 1 = 1
  and b.code not in (
    select b.id
    from apple a
         inner join banana b on a.banana_id=b.id
         inner join cherry c on b.cherry_id = c.id
    where 1 = 1
      and b.address = 150301
    and ....
    group by b.id
)
  and ....
group by b.code
order by b.code

 

  • 메인 쿼리와 서브쿼리를 연결하기 위해서 유니크 값인 b.id를 활용했다.
  • 서브쿼리와 메인 쿼리의 where절 조건은 동일하게 설정해주었다.
728x90
반응형