دستور Exists در SQL Server

Exists یک راه آسان و ساده برای اینکه چک کنیم یک  sub query رکوردی را باز میگرداند یا نه . اگر sub query حداقل رکوردی را بازگرداند کورئری خارجی که sub query در آن قرار دارد اجرا می شود  و اگر sub query هیچ رکوردی را به عنوان نتیجه بر نگرداند کوئری خارجی که sub query در آن قرار دارد اجرا نمی شود  و خروجی کلی تمام دستورات خالی می باشد . اگر  sub query  هیچ رکوردی را بازنگرداند خروجی آن False خواهد بود .

Exists را می توان در دستورات insert,select,update,delete به کار برد .

شکل کلی استفاده از آن به صورت زیر می باشد :

WHERE EXISTS ( subquery );

چه چیزی به جای subquery قرار دهیم:

در syntax بالا که قرار داده شده است به جای subquery باید یک دستور select بنویسید . نوشتن دستوری به جز select با خطا مواجه خواهد شد .

نمونه ای تقریبا  کامل از syntax کامل Exists می تواند به صورت زیر باشد :

SELECT "column_name1"
FROM "table_name1"
WHERE EXISTS 
(SELECT * 
FROM "table_name2"
WHERE "condition");

 برای  درک بهتر و نحوه کارکرد آن چند مثال را بیان خواهیم کرد ، ابتدا دو جدول با فیلد های زیر ایجاد کنید :

Exists-Sql

کوئری زیر را در نظر بگیرید :

SELECT SUM(Sales) AS 'Sum' FROM Store_Information
WHERE EXISTS
(SELECT * FROM Geography
WHERE Region_Name = 'West'
);

 نتیجه ای به عنوان خروجی برگردانده می شود برابر است با : 2750

در کوئری بالا ابتدا subquery که با رنگ آبی می باشد  اجرا می شود در subquery گفته ایم که تمام رکوردهایی از جدول Geography انتخاب شوند که Region_Name آنها برابر با West باشد که یک رکورد نتیجه آن می باشد و طبق توضیحاتی که بیان کردیم در صورتی که subquery حداقل یک رکورد را برگرداند کوئری اصلی اجرا می شود و در کورئری اصلی (خارجی) جمع تمامی رکورد های جدول Store_Information را محاسبه میکند.

کوئری زیر را در نظر بگیرید :

select * from store_information  as si
where exists (select * from [geography] AS g where si.Store_name=g.Store_name)

خروجی کوئری فوق چه خواهد بود ؟ اگر حدس زده اید که تمام رکورد های جدول store_information باید بگویم که نتیجه فقط دو رکورد خواهد بود .

/Exists-Sql

چرا ؟

کوئری فوق رکوردی هایی از جدول stote_information را بر میگرداند که حداقل دارای  یک رکورد با مقدار یکسان store_name در جدول geography باشد . 

 

مثال :

دو جدول زیر را در نظر بگیرید :

Exists-Sql server

نتیجه کوئری زیر انتخاب تمامی رکوردهایی از جدول Stores می باشد که حداقل دارای یک رکورد معادل با مقدار یکسان Storecode می باشند به همین دلیل خروجی کوئری زیر فقط یک رکورد  با مقدار StoreCode=Test در جدول Stores می باشد.

select * from Stores AS st  where exists(select * from Sales AS sa where st.StoreCode=sa.StoreCode )

 مثال :

نتیجه کوئری زیر تمام  رکوردی های جدول Stores می باشد :

select * from Stores AS st  where exists(select * from Sales )

 


توسط : عثمان رحیمی  7 ماه قبل ، یکشنبه 4 آبان 1393 ساعت 01:49  1  3770

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط

نظرات خوانندگان

کاربر مهمان (Mohadeseh)  در تاریخ : 1 ماه قبل ، پنج شنبه 23 بهمن 1393 ساعت 00:00

سلام .. خیلی خوب توضیح دادید .. ممنون :)