MSSQL에서 사용하는 쿼리로 데이터 범위를 제한하여 선별할때 사용하는 구문이다.
어떻게 보면 join과 비슷하다고 볼 수 있는데, 데이터의 범위를 제한하는 구문을 지금까지 join에서만 봐왔기에 유용하게 활용할 수 있을 것으로 보인다.
메인 쿼리를 실행한 후, 해당 결과를 서브쿼리에 가져간다.
서브쿼리의 실행결과가 존재할 경우, 메인쿼리의 레코드를 출력한다.
SELECT CUSTOMER_NAME FROM CUSTOMER
WHERE EXISTS (
SELECT CUSTOMER_NO FROM CUSTOMER_INFO
WHERE CUSTOMER.CUSTOMER_NO = CUSTOMER_INFO.CUSTOMER_NO
)
위 SQL의 실행결과를 살펴본다.
여기서의 핵심은 메인쿼리의 결과를 먼저 내놓고, EXIST에서 서브쿼리를 실행해가면서 메인쿼리 결과 출력을 최종적으로 결정한다.
기존쿼리의 내용을 바탕으로 서브쿼리를 실행하며, 서브쿼리 결과가 true일 경우에 해당 서브쿼리 레코드는 그대로 유지한다.
SELECT CUSTOMER_NAME
FROM CUSTOMER
WHERE CUSTOMER_NO IN (10, 20, 30. 40)
기본적으로 IN과 EXIST는 실행순서부터 다르다.
이처럼 IN의 경우엔 범위를 제한하기위해 가장 먼저 실행하는 연산이다.
최종적으로 결과를 출력할때 IN연산을 먼저 실행하여 범위를 제한한 상태에서 진행하고, EXIST의 경우엔 결과를 출력하고 EXIST 구문을 실행하여 범위를 다듬는다.
EXIST의 개념과 IN의 차이(기본개념) - https://doorbw.tistory.com/222
EXSIT의 세부진행과정 - https://gent.tistory.com/506