Vytvořme tabulku dbo.Customer a dbo.Country a poté použijte EXISTS k vrácení záznamů pro různé scénáře.
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 vrátí hodnotu TRUE, pokud dílčí dotaz obsahuje nějaké řádky.
To je pravda, pokud náš poddotaz vrátí nějaké řádky a my jsme použili EXISTS, vnější dotaz vrátí všechny řádky.
Vyberte * z dbo.Customer
WHERE Exists ( Select 1)
Jak používat EXISTS v SQL Server – SQL Server / Výukový program TSQL |
Všimli jsme si, že náš dílčí dotaz je statický dotaz (Vyberte 1). Protože poddotaz vrátil řádek a EXISTS vrátilo hodnotu TRUE, zobrazí se všechny záznamy z tabulky dbo.Customer.
2) Použijte EXISTS a Join with SubQuery
Příklad EXISTS v reálném čase by byl, kdybychom chtěli najít všechny záznamy z tabulky dbo.Customer, která má odpovídající CountryShortName z tabulky dbo.Country.
SELECT * FROM dbo.Customer a WHERE EXISTS (SELECT 1 FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Všiml jsem si, že jsem porovnal CountryShortName z dbo.Customer a dbo.Country. Každý vnější řádek bude porovnán s výsledky poddotazu a pokud se shoduje, pak dostaneme řádek.
Pro stejný požadavek můžeme použít klauzuli IN.
SELECT * FROM dbo.Customer a WHERE a.CountryShortName IN (SELECT b.CountryShortName FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
Jak používat EXISTS na serveru SQL k vrácení odpovídajících záznamů - SQL Server / Výukový program TSQL |
Jak používat existuje a neukončuje na serveru SQL