인프런 커뮤니티 질문&답변

KoKuMa님의 프로필 이미지
KoKuMa

작성한 질문수

데이터 분석 SQL Fundamentals

상관(Correlated) 서브 쿼리와 Exists 이해 - 02

상관쿼리와 비상관쿼리의 쓰임새가 헷깔립니다.

해결된 질문

작성

·

135

0

결국 둘 다 where 절에 쓰여서 메인 쿼리에 어떤 조건을 충족하는 값들이 있는지 필터링을 하는 것 같은데 차이점이 와닿지가 않네요. 게다가 in과 exists도 어느정도 서로 대신해서 쓸 수 있다니까 더 헷깔리는 것 같습니다.

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

서브쿼리 자체가 좀 깊이 들어가면 헷갈리는 부분이 있습니다. 근데 서브쿼리를 좀 사용하다 보시면, 자연적으로 익숙해 집니다.

상관 쿼리, 비상관 쿼리가 헷갈리시면 굳이 상관 쿼리, 비상관 쿼리를 구분하지 않는 것도 방법입니다. 그냥 서브쿼리로 퉁(?)치고, 서브쿼리 내부에 메인 쿼리의 조건이 들어 올 수도 있다고 생각하셔도 됩니다.

보통 in과 exists로 나누어서 쿼리를 사용할때

  1. in의 경우는 서브쿼리 수행 결과 자체를 메인 쿼리로 연결할 때 주로 사용합니다. 이게 SQL 옵티마이저 관점에서는 서브쿼리가 먼저 Access 되고, 이후 결과 값으로 메인 쿼리를 연결하는 제공자 역할을 수행합니다.

  2. exists의 경우는 메인 쿼리를 먼저 Access해서 이 값으로 서브쿼리에서 필터링을 수행하는 역할을 주로 사용합니다. 즉 메인 쿼리 집합을 서브쿼리로 필터링하는 확인자 역할을 주로 합니다.

이러한 차이가 있어서, in과 exists가 분리되어 있으며 SQL 옵티마이저 관점에서도 서로 다른 실행 계획이 만들어 질 수 있습니다.

감사합니다.

KoKuMa님의 프로필 이미지
KoKuMa

작성한 질문수

질문하기