عملگر Exists در SQL Server
عملگر Exists چیست ؟
عملگر Exists یکی از امکانات توکار پایگاه داده SQL Server می باشد که به ما این امکان را میدهد تا بررسی کنیم که آیا یک sub query رکوردی را به عنوان خروجی بر میگرداند یا خیر .
اگر sub query حداقل رکوردی را بازگرداند کورئری خارجی که sub query در آن قرار دارد اجرا می شود و اگر sub query هیچ رکوردی را به عنوان نتیجه بر نگرداند کوئری خارجی که sub query در آن قرار دارد اجرا نمی شود و خروجی کلی تمام دستورات خالی می باشد . در صورتی که sub query هیچ رکوردی را بازنگرداند خروجی آن False خواهد بود .
دستوراتی که exists را میتوان در آن بکار برد :
عملگر Exists را می توان در دستورات چهار عمل اصلی یعنی insert,select,update,delete به کار برد .
شکل کلی استفاده از آن به صورت زیر می باشد :
1 |
WHERE EXISTS ( subquery ); |
چه چیزی به جای subquery قرار دهیم:
در syntax بالا که قرار داده شده است به جای subquery باید یک دستور select بنویسید . نوشتن دستوری به جز select با خطا مواجه خواهد شد .
نمونه ای تقریبا کامل از syntax کامل Exists می تواند به صورت زیر باشد :
1 2 3 4 5 6 |
<strong>SELECT "column_name1" FROM "table_name1" WHERE EXISTS (SELECT * FROM "table_name2" WHERE "condition");</strong> |
برای درک بهتر و نحوه کارکرد آن چند مثال را بیان خواهیم کرد ، ابتدا دو جدول با فیلد های زیر ایجاد کنید :
کوئری زیر را در نظر بگیرید :
1 2 3 4 |
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 را محاسبه میکند.
کوئری زیر را در نظر بگیرید :
1 2 |
select * from store_information as si where exists (select * from [geography] AS g where si.Store_name=g.Store_name) |
خروجی کوئری فوق چه خواهد بود ؟ اگر حدس زده اید که تمام رکورد های جدول store_information باید بگویم که نتیجه فقط دو رکورد خواهد بود .
کوئری فوق رکوردی هایی از جدول stote_information را بر میگرداند که حداقل دارای یک رکورد با مقدار یکسان store_name در جدول geography باشد .
به عنوان مثال ، دو جدول زیر را در نظر بگیرید :
نتیجه کوئری زیر انتخاب تمامی رکوردهایی از جدول Stores می باشد که حداقل دارای یک رکورد معادل با مقدار یکسان Storecode می باشند به همین دلیل خروجی کوئری زیر فقط یک رکورد با مقدار StoreCode=Test در جدول Stores می باشد.
1 |
select * from Stores AS st where exists(select * from Sales AS sa where st.StoreCode=sa.StoreCode ) |
نتیجه کوئری زیر تمام رکوردی های جدول Stores می باشد :
1 |
select * from Stores AS st where exists(select * from Sales ) |
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.