Vamos criar dbo.Customer e dbo.Country Table e então usar EXISTS para retornar registros para diferentes cenários.
Create table dbo.Customer (Id int, FName VARCHAR(50), LName VARCHAR(50), CountryShortName CHAR(2), Age tinyint) GO insert into dbo.Customer Values ( 1,'Raza','M','PK',20), (2,'Rita','John','US',12), (3,'Sukhi','Singh',Null,25), (4,'James','Smith','CA',60), (5,'Robert','Ladson','US',54), (6,'Alice','John','US',87), (7,'Raza','M','US',33), (8,'Dita','M','US',15), (9,'Adita','M','US',29) Create table dbo.Country ( CId tinyint, CountryName VARCHAR(50), CountryShortName CHAR(2)) go Insert into dbo.Country Values (1,'Pakistan','Pk'), (2,'United States of America','US')
1) EXISTS retornará TRUE se a subconsulta contiver alguma linha.
Isso mesmo, se nossa subconsulta retornar qualquer linha e tivermos usado EXISTS, a consulta externa retornará todas as linhas.
Selecione * de dbo.Customer
WHERE Exists ( Select 1)
Como usar EXISTS no SQL Server - Tutorial SQL Server / TSQL |
Percebi que nossa subconsulta é uma consulta estática (Selecione 1). Como a subconsulta retornou linha e EXISTS retornou TRUE, todos os registros da tabela dbo.Customer são exibidos.
2) Use EXISTS e Join with SubQuery
O exemplo mais em tempo real de EXISTS seria quando queremos encontrar todos os registros da tabela dbo.Customer que tenha CountryShortName correspondente da tabela dbo.Country.
SELECT * FROM dbo.Customer a WHERE EXISTS (SELECT 1 FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Percebi que eu comparei CountryShortName de dbo.Customer e dbo.Country. Cada linha externa será comparada com os resultados da subconsulta e, se corresponder, obteremos a linha.
Podemos usar a cláusula IN para o mesmo requisito.
SELECT * FROM dbo.Customer a WHERE a.CountryShortName IN (SELECT b.CountryShortName FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Como usar EXISTS no SQL Server para retornar registros correspondentes - SQL Server / Tutorial TSQL |
Como usar Exists e Not Exits no SQL Server