출처 : 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 |
댓글