[SQLD/P] EXIST

Hyo Kyun Lee·2022년 12월 4일
0

SQLD/P

목록 보기
53/82

1. 개요

MSSQL에서 사용하는 쿼리로 데이터 범위를 제한하여 선별할때 사용하는 구문이다.

어떻게 보면 join과 비슷하다고 볼 수 있는데, 데이터의 범위를 제한하는 구문을 지금까지 join에서만 봐왔기에 유용하게 활용할 수 있을 것으로 보인다.

2. EXIST

메인 쿼리를 실행한 후, 해당 결과를 서브쿼리에 가져간다.
서브쿼리의 실행결과가 존재할 경우, 메인쿼리의 레코드를 출력한다.

SELECT CUSTOMER_NAME FROM CUSTOMER
WHERE EXISTS (
SELECT CUSTOMER_NO FROM CUSTOMER_INFO
WHERE CUSTOMER.CUSTOMER_NO = CUSTOMER_INFO.CUSTOMER_NO
)

위 SQL의 실행결과를 살펴본다.

  • FROM CUSTOMER : CUSTOMER table을 살펴본다.
  • SELECT CUSTOMER_NAME : CUSTOMER_NAME을 출력한다.
  • EXISTS : 해당 쿼리 결과를 가지고 EXIST 서브쿼리를 실행한다.
  • SELECT ~ : 메인쿼리에서 추출한 레코드를 차례로 살펴보면서, 서브쿼리 결과가 존재한다면 출력하고 아니면 출력하지 않는다.

여기서의 핵심은 메인쿼리의 결과를 먼저 내놓고, EXIST에서 서브쿼리를 실행해가면서 메인쿼리 결과 출력을 최종적으로 결정한다.

기존쿼리의 내용을 바탕으로 서브쿼리를 실행하며, 서브쿼리 결과가 true일 경우에 해당 서브쿼리 레코드는 그대로 유지한다.

3. IN과의 차이점

SELECT CUSTOMER_NAME
FROM CUSTOMER
WHERE CUSTOMER_NO IN (10, 20, 30. 40)

기본적으로 IN과 EXIST는 실행순서부터 다르다.

  • FROM CUSTOMER : CUSTOMER table을 살펴본다.
  • WHERE : 선별조건을 살펴본다.
  • IN (10, 20, 30. 40) : CUSTOMER_NO 검색조건범위를 제한한다.
  • WHERE CUSTOMER_NO IN (10, 20, 30, 40) : WHERE 조건의 내용을 반영하여 데이터 범위를 제한한다.
  • SELECT CUSTOMER_NAME : 제한한 범위를 바탕으로 최종적으로 결과를 출력한다.

이처럼 IN의 경우엔 범위를 제한하기위해 가장 먼저 실행하는 연산이다.

최종적으로 결과를 출력할때 IN연산을 먼저 실행하여 범위를 제한한 상태에서 진행하고, EXIST의 경우엔 결과를 출력하고 EXIST 구문을 실행하여 범위를 다듬는다.

4. 참고자료

EXIST의 개념과 IN의 차이(기본개념) - https://doorbw.tistory.com/222
EXSIT의 세부진행과정 - https://gent.tistory.com/506

0개의 댓글