Нека създадем dbo.Customer и dbo.Country Table и след това използваме EXISTS за връщане на записи за различни сценарии.
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 ще върне TRUE, ако подзаявката съдържа редове.
Точно така, ако нашата подзаявка ще върне някакви редове и сме използвали EXISTS, външната заявка ще върне всички редове.
Изберете * от dbo.Customer
WHERE Exists ( Select 1)
Как да използвате EXISTS в SQL Server - SQL Server / TSQL урок |
Забелязахме, че нашата подзаявка е статична заявка ( Изберете 1). Тъй като подзаявката върна ред и EXISTS върна TRUE, така че всички записи от таблицата dbo.Customer се показват.
2) Използвайте EXISTS и Join с SubQuery
По-добрият пример в реално време за EXISTS би бил, когато искаме да намерим всички записи от таблицата dbo.Customer, която има съвпадение на CountryShortName от dbo.Country Table.
SELECT * FROM dbo.Customer a WHERE EXISTS (SELECT 1 FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Забелязах, че сравних CountryShortName от dbo.Customer и dbo.Country. Всеки външен ред ще бъде сравнен с резултатите от подзаявката и ако съвпада, тогава получаваме реда.
Можем да използваме клаузата IN за същото изискване.
SELECT * FROM dbo.Customer a WHERE a.CountryShortName IN (SELECT b.CountryShortName FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Как да използвате EXISTS в SQL Server за връщане на съвпадащи записи - SQL Server / TSQL урок |
Как да използвате Exists и Not Exits в SQL Server