다음을 통해 공유


EXISTS로 시작하는 하위 쿼리

하위 쿼리가 EXISTS 키워드로 시작하면 존재 여부를 테스트할 수 있습니다. 외부 쿼리의 WHERE 절은 하위 쿼리에서 반환된 행이 있는지 여부를 테스트합니다. 하위 쿼리는 실제로 데이터를 생성하지 않고 TRUE 또는 FALSE 값을 반환합니다.

EXISTS로 시작하는 하위 쿼리는 다음 구문을 사용합니다.

WHERE [NOT] EXISTS (subquery)

다음 쿼리는 Wheels 하위 범주에 있는 모든 제품의 이름을 검색합니다.

USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE EXISTS
    (SELECT * 
     FROM Production.ProductSubcategory
     WHERE ProductSubcategoryID = 
            Production.Product.ProductSubcategoryID
        AND Name = 'Wheels')

결과 집합은 다음과 같습니다.

Name
--------------------------------------------------
LL Mountain Front Wheel
ML Mountain Front Wheel
HL Mountain Front Wheel
LL Road Front Wheel
ML Road Front Wheel
HL Road Front Wheel
Touring Front Wheel
LL Mountain Rear Wheel
ML Mountain Rear Wheel
HL Mountain Rear Wheel
LL Road Rear Wheel
ML Road Rear Wheel
HL Road Rear Wheel
Touring Rear Wheel

(14 row(s) affected)

각 제품의 이름을 차례로 고려하여 위 쿼리의 결과를 확인합니다. 이 값을 통해 하위 쿼리에서 하나 이상의 행을 반환하는지, 즉 쿼리에서 존재 테스트의 결과가 TRUE인지 확인합니다.

EXISTS로 시작하는 하위 쿼리는 다음과 같은 점에서 다른 하위 쿼리와 다릅니다.

  • EXISTS 키워드 앞에는 열 이름, 상수, 다른 식이 올 수 없습니다.
  • EXISTS로 시작하는 하위 쿼리의 SELECT 목록은 대부분 별표(*)로 구성됩니다. 하위 쿼리에 지정된 조건을 만족하는 행이 있는지 여부를 테스트하는 것이므로 열 이름은 나열하지 않아도 됩니다.

대부분 하위 쿼리를 사용하지 않는 대체 구문이 없으므로 EXISTS 키워드는 중요합니다. EXISTS를 사용하여 만든 일부 쿼리는 다른 방식으로 표시할 수 없지만 IN을 사용하거나 ANY 또는 ALL에 의해 수정된 비교 연산자를 사용하여 유사한 결과를 얻을 수 있는 쿼리가 많습니다.

예를 들어 앞의 쿼리는 IN을 사용하여 다음과 같이 표시할 수 있습니다.

USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN
    (SELECT ProductSubcategoryID
     FROM Production.ProductSubcategory
     WHERE Name = 'Wheels')

참고 항목

관련 자료

EXISTS(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기