본문 바로가기
프로그래밍/DB & Redis

EXISTS로 시작하는 하위 쿼리

by 뽀도 2015. 7. 29.

출처 : https://technet.microsoft.com/ko-kr/library/ms189259(v=SQL.105).aspx

 

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

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

 

WHERE [NOT] EXISTS (subquery)

 

 

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

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

 

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

  • EXISTS 키워드 앞에는 열 이름, 상수, 다른 식이 올 수 없습니다.

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

 

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

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

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN
    (SELECT ProductSubcategoryID
     FROM Production.ProductSubcategory
     WHERE Name = 'Wheels')
반응형

'프로그래밍 > DB & Redis' 카테고리의 다른 글

[MSSQL] Union  (0) 2015.08.12
NHibernate  (0) 2015.08.04
MS-SQL 다중 업데이트  (0) 2015.07.15
MS_SQL 반복문  (0) 2015.07.14
DB 데이터 형식 맵핑  (0) 2015.07.07

댓글