dbo.Customerおよびdbo.Countryテーブルを作成し、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<から*を選択します。 br />
WHERE Exists ( Select 1)
SQLServerでEXISTSを使用する方法-SQLServer/TSQLチュートリアル |
サブクエリが静的クエリであることに気づきました(1を選択)。サブクエリが行を返し、EXISTSがTRUEを返したため、dbo.Customerテーブルのすべてのレコードが表示されます。
2)EXISTSを使用してサブクエリと結合
EXISTSのよりリアルタイムの例は、dbo.CountryTableからCountryShortNameと一致するdbo.Customerテーブルからすべてのレコードを検索する場合です。
SELECT * FROM dbo.Customer a WHERE EXISTS (SELECT 1 FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
dbo.Customerとdbo.CountryのCountryShortNameを比較したことに気づきました。各外側の行はサブクエリの結果と比較され、一致する場合はその行が取得されます。
同じ要件にIN句を使用できます。
SELECT * FROM dbo.Customer a WHERE a.CountryShortName IN (SELECT b.CountryShortName FROM dbo.Country b WHERE a.CountryShortName=b.CountryShortName)
SQLServerでEXISTSを使用して一致するレコードを返す方法-SQLServer/TSQLチュートリアル |
SQLServerでExistsとNotExitsを使用する方法