적용 대상:Microsoft Fabric의 Microsoft Fabric
SQL 데이터베이스
에 있는 Microsoft Fabric
Warehouse의 SQL Server Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System(PDW)SQL 분석 엔드포인트
하위 쿼리를 지정하여 행의 존재 여부를 테스트합니다.
구문
EXISTS ( subquery )
인수
하위 쿼리
제한된 SELECT
문입니다. 키워드는 INTO
허용되지 않습니다. 자세한 내용은 SELECT의 하위 쿼리에 대한 정보를 참조하세요.
반환 형식
Boolean
결과 값
하위 쿼리에 행이 포함되어 있는지를 반환 TRUE
합니다.
예제
이 문서의 코드 샘플은 AdventureWorks2022
또는 AdventureWorksDW2022
샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.
A. 하위 쿼리에서 결과 집합을 계속 반환하는 데 사용 NULL
다음 예제에서는 하위 쿼리에 지정된 결과 집합 NULL
을 반환하고 여전히 을 사용하여 TRUE
계산합니다EXISTS
.
SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE EXISTS (SELECT NULL)
ORDER BY Name ASC;
B. EXISTS 및 IN을 사용하여 쿼리 비교
다음 예에서는 기능이 동일한 두 쿼리를 비교합니다. 첫 번째 쿼리에서는 EXISTS
를 사용하고 두 번째 쿼리에서는 IN
을 사용합니다.
SELECT a.FirstName,
a.LastName
FROM Person.Person AS a
WHERE EXISTS (SELECT *
FROM HumanResources.Employee AS b
WHERE a.BusinessEntityID = b.BusinessEntityID
AND a.LastName = 'Johnson');
GO
다음 쿼리에서는 IN
을 사용합니다.
SELECT a.FirstName,
a.LastName
FROM Person.Person AS a
WHERE a.LastName IN (SELECT a.LastName
FROM HumanResources.Employee AS b
WHERE a.BusinessEntityID = b.BusinessEntityID
AND a.LastName = 'Johnson');
GO
두 쿼리에 대한 결과 집합은 다음과 같습니다.
FirstName LastName
-------------------------------------------------- ----------
Barry Johnson
David Johnson
Willis Johnson
C. EXISTS 및 = ANY를 사용하여 쿼리 비교
다음 예에서는 공급업체와 이름이 동일한 상점을 찾는 두 개의 쿼리를 보여 줍니다. 첫 번째 쿼리에서는 EXISTS
를 사용하고 두 번째 쿼리에서는 = ANY
를 사용합니다.
SELECT DISTINCT s.Name
FROM Sales.Store AS s
WHERE EXISTS (SELECT *
FROM Purchasing.Vendor AS v
WHERE s.Name = v.Name);
GO
다음 쿼리에서는 = ANY
을 사용합니다.
SELECT DISTINCT s.Name
FROM Sales.Store AS s
WHERE s.Name = ANY (SELECT v.Name
FROM Purchasing.Vendor AS v);
GO
D. EXISTS 및 IN을 사용하여 쿼리 비교
다음 예에서는 P
로 시작되는 부서의 직원을 찾는 쿼리를 보여 줍니다.
SELECT p.FirstName,
p.LastName,
e.JobTitle
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
WHERE EXISTS (SELECT *
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON d.DepartmentID = edh.DepartmentID
WHERE e.BusinessEntityID = edh.BusinessEntityID
AND d.Name LIKE 'P%');
GO
다음 쿼리에서는 IN
을 사용합니다.
SELECT p.FirstName,
p.LastName,
e.JobTitle
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.BusinessEntityID = edh.BusinessEntityID
WHERE edh.DepartmentID IN (SELECT DepartmentID
FROM HumanResources.Department
WHERE Name LIKE 'P%');
GO
E. NOT EXISTS 사용
NOT EXISTS
는 반대로 EXISTS
작동합니다.
WHERE
하위 쿼리에서 NOT EXISTS
반환되는 행이 없는 경우 절이 충족됩니다. 다음 예제에서는 이름이 로 시작하는 부서에 없는 직원을 찾습니다 P
.
SELECT p.FirstName,
p.LastName,
e.JobTitle
FROM Person.Person AS p
INNER JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT EXISTS (SELECT *
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON d.DepartmentID = edh.DepartmentID
WHERE e.BusinessEntityID = edh.BusinessEntityID
AND d.Name LIKE 'P%')
ORDER BY LastName, FirstName;
GO
결과 집합은 다음과 같습니다.
FirstName LastName Title
------------------------------ ------------------------------ ------------
Syed Abbas Pacific Sales Manager
Hazem Abolrous Quality Assurance Manager
Humberto Acevedo Application Specialist
Pilar Ackerman Shipping & Receiving Superviso
François Ajenstat Database Administrator
Amy Alberts European Sales Manager
Sean Alexander Quality Assurance Technician
Pamela Ansman-Wolfe Sales Representative
Zainal Arifin Document Control Manager
David Barber Assistant to CFO
Paula Barreto de Mattos Human Resources Manager
Shai Bassli Facilities Manager
Wanida Benshoof Marketing Assistant
Karen Berg Application Specialist
Karen Berge Document Control Assistant
Andreas Berglund Quality Assurance Technician
Matthias Berndt Shipping & Receiving Clerk
Jo Berry Janitor
Jimmy Bischoff Stocker
Michael Blythe Sales Representative
David Bradley Marketing Manager
Kevin Brown Marketing Assistant
David Campbell Sales Representative
Jason Carlson Information Services Manager
Fernando Caro Sales Representative
Sean Chai Document Control Assistant
Sootha Charncherngkha Quality Assurance Technician
Hao Chen HR Administrative Assistant
Kevin Chrisulis Network Administrator
Pat Coleman Janitor
Stephanie Conroy Network Manager
Debra Core Application Specialist
Ovidiu Crãcium Sr. Tool Designer
Grant Culbertson HR Administrative Assistant
Mary Dempsey Marketing Assistant
Thierry D'Hers Tool Designer
Terri Duffy VP Engineering
Susan Eaton Stocker
Terry Eminhizer Marketing Specialist
Gail Erickson Design Engineer
Janice Galvin Tool Designer
Mary Gibson Marketing Specialist
Jossef Goldberg Design Engineer
Sariya Harnpadoungsataya Marketing Specialist
Mark Harrington Quality Assurance Technician
Magnus Hedlund Facilities Assistant
Shu Ito Sales Representative
Stephen Jiang North American Sales Manager
Willis Johnson Recruiter
Brannon Jones Finance Manager
Tengiz Kharatishvili Control Specialist
Christian Kleinerman Maintenance Supervisor
Vamsi Kuppa Shipping & Receiving Clerk
David Liu Accounts Manager
Vidur Luthra Recruiter
Stuart Macrae Janitor
Diane Margheim Research & Development Enginee
Mindy Martin Benefits Specialist
Gigi Matthew Research & Development Enginee
Tete Mensa-Annan Sales Representative
Ramesh Meyyappan Application Specialist
Dylan Miller Research & Development Manager
Linda Mitchell Sales Representative
Barbara Moreland Accountant
Laura Norman Chief Financial Officer
Chris Norred Control Specialist
Jae Pak Sales Representative
Wanda Parks Janitor
Deborah Poe Accounts Receivable Specialist
Kim Ralls Stocker
Tsvi Reiter Sales Representative
Sharon Salavaria Design Engineer
Ken Sanchez Chief Executive Officer
José Saraiva Sales Representative
Mike Seamans Accountant
Ashvini Sharma Network Administrator
Janet Sheperdigian Accounts Payable Specialist
Candy Spoon Accounts Receivable Specialist
Michael Sullivan Sr. Design Engineer
Dragan Tomic Accounts Payable Specialist
Lynn Tsoflias Sales Representative
Rachel Valdez Sales Representative
Garrett Vargar Sales Representative
Ranjit Varkey Chudukatil Sales Representative
Bryan Walton Accounts Receivable Specialist
Jian Shuo Wang Engineering Manager
Brian Welcker VP Sales
Jill Williams Marketing Specialist
Dan Wilson Database Administrator
John Wood Marketing Specialist
Peng Wu Quality Assurance Supervisor
예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)
F. EXISTS 사용
다음 예제에서는 ProspectiveBuyer
테이블의 행이 DimCustomer
테이블의 행과 일치하는지 여부를 식별합니다. 쿼리는 두 테이블의 LastName
값과 BirthDate
일치하는 경우에만 행을 반환합니다.
SELECT a.LastName, a.BirthDate
FROM DimCustomer AS a
WHERE EXISTS (SELECT *
FROM dbo.ProspectiveBuyer AS b
WHERE (a.LastName = b.LastName)
AND (a.BirthDate = b.BirthDate));
G. NOT EXISTS 사용
NOT EXISTS
는 반대로 EXISTS
작동합니다.
WHERE
하위 쿼리에서 NOT EXISTS
반환되는 행이 없는 경우 절이 충족됩니다. 다음 예제에서는 테이블에서 테이블 DimCustomer
의 LastName
항목과 BirthDate
일치하지 않는 행을 ProspectiveBuyers
찾습니다.
SELECT a.LastName,
a.BirthDate
FROM DimCustomer AS a
WHERE NOT EXISTS (SELECT *
FROM dbo.ProspectiveBuyer AS b
WHERE (a.LastName = b.LastName)
AND (a.BirthDate = b.BirthDate));