해결된 질문
작성
·
135
0
결국 둘 다 where 절에 쓰여서 메인 쿼리에 어떤 조건을 충족하는 값들이 있는지 필터링을 하는 것 같은데 차이점이 와닿지가 않네요. 게다가 in과 exists도 어느정도 서로 대신해서 쓸 수 있다니까 더 헷깔리는 것 같습니다.
답변 1
1
안녕하십니까,
서브쿼리 자체가 좀 깊이 들어가면 헷갈리는 부분이 있습니다. 근데 서브쿼리를 좀 사용하다 보시면, 자연적으로 익숙해 집니다.
상관 쿼리, 비상관 쿼리가 헷갈리시면 굳이 상관 쿼리, 비상관 쿼리를 구분하지 않는 것도 방법입니다. 그냥 서브쿼리로 퉁(?)치고, 서브쿼리 내부에 메인 쿼리의 조건이 들어 올 수도 있다고 생각하셔도 됩니다.
보통 in과 exists로 나누어서 쿼리를 사용할때
in의 경우는 서브쿼리 수행 결과 자체를 메인 쿼리로 연결할 때 주로 사용합니다. 이게 SQL 옵티마이저 관점에서는 서브쿼리가 먼저 Access 되고, 이후 결과 값으로 메인 쿼리를 연결하는 제공자 역할을 수행합니다.
exists의 경우는 메인 쿼리를 먼저 Access해서 이 값으로 서브쿼리에서 필터링을 수행하는 역할을 주로 사용합니다. 즉 메인 쿼리 집합을 서브쿼리로 필터링하는 확인자 역할을 주로 합니다.
이러한 차이가 있어서, in과 exists가 분리되어 있으며 SQL 옵티마이저 관점에서도 서로 다른 실행 계획이 만들어 질 수 있습니다.
감사합니다.