• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    해결됨

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

24.02.15 23:38 작성 조회수 80

0

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

답변 1

답변을 작성해보세요.

1

안녕하십니까,

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

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

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

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

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

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

감사합니다.