Låt oss skapa dbo.Customer och dbo.Country Table och sedan använda EXISTS för att returnera poster för olika scenarier.
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 returnerar TRUE om underfrågan innehåller några rader.
Det stämmer, om vår underfråga kommer att returnera några rader och vi har använt EXISTS, kommer den yttre frågan att returnera alla rader.
Välj * från dbo.Customer
WHERE Exists ( Select 1)
Hur man använder EXISTS i SQL Server - SQL Server / TSQL Tutorial |
Merkte att vår underfråga är statisk fråga (Välj 1). Eftersom underfrågan returnerade rad och EXISTS returnerade TRUE så alla poster från dbo.Customer-tabellen visas.
2) Använd EXISTS och gå med i SubQuery
Det mer realtidsexemplet på EXISTS skulle vara när vi vill hitta alla poster från dbo.Customer-tabellen som har matchande CountryShortName från dbo.Country-tabellen.
SELECT * FROM dbo.Customer a WHERE EXISTS (SELECT 1 FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Märde att jag har jämfört CountryShortName från dbo.Customer och dbo.Country. Varje yttre rad kommer att jämföras med resultat från underfrågan och om det matchar får vi raden.
Vi kan använda IN-satsen för samma krav.
SELECT * FROM dbo.Customer a WHERE a.CountryShortName IN (SELECT b.CountryShortName FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Hur man använder EXISTS i SQL Server för att returnera matchande poster - SQL Server / TSQL Tutorial |
Hur man använder Exists and Not Exits i SQL Server