مشكل :

در هنگام پيوستن به پايگاه دادههاي متعدد، شما همواره توانايي استفاده از عملگرهاي UNION و UNION ALL را داريد و به شما اين اجازه را ميدهد تا يك مجموعه نتيجه متمايز( UNION) و يا يك مجموعه نتيجه كاملي (UNION ALL) را داشته باشيد. اين دستورات هنگاميكه شما احتياج داريد دادهها را از جداول متفاوتي گرفته و نتايج آنها را به عنوان يك مجموعه نتيجه متمايز واحد نشان دهيد، بسيار سودمند است .

از طرف ديگر، اين راه تنها در نمايش يك مجموعه نتايج در جاييكه هر دو مجموعه از دادهها مطابق هستند و يا تنها در جاييكه دادهها در يكي از جداول وجود دارند و نه در ديگري، بسيار سودمند خواهد بود. اين كار با استفاده از انواع مختلف Join ها قابل اجرا است، اما چه گزينههاي ديگري را SQL SERVER ارايه ميدهد؟    راه حال:

در SQL SERVER 2005، شركت مايكروسافت براي توسعه بيشتر چيزهايي كه از قبل ميتوانستيم با عملگرهاي UNION و UNION ALL انجام دهيم ،عملگرهاي اين INTERSECT  و EXCEPT را معرفي كرد .

  • INTERSECT : مجموعه نتيجه نهايي شما ارزشهايي است كه در هر دو جدول مطابق باشند.
  • EXCEPT : مجموعه نتيجه نهايي شما دادههايي است كه در مجموعه دادههاي جدول اول وجود دارند اما در جدول دوم نميباشند.

فوايد اين دستورات اين است كه به شما اين اجازه را ميدهد تا يك ليست متمايز در مقابل تمامي ستونها همانند عملگرهاي UNION و UNION ALL بدون انجام Having To و با انجام يك Group By و يا انجام يك مقايسه از هر ستون تنها داشته باشيد.

مانند عملگرهاي UNION و UNION ALL، به همان اندازه كه ستونها احتياج به انواع دادههاي موافق و يكسان دارند ساختارهاي جدول نيز نياز دارند تا استوار باشند.

اجازه دهيد مثالي بياوريم كه در آن ما دو جدول Manager  و Customer داريم. هر دوي اين جداول تقريبا ساختار مشابهي همانند ستونهاي زير دارند:

  • FirstName
  • LastName
  • AddressLine1
  • City
  • StateProvinceCode
  • PostalCode

نمونه دادههاي جدول Manager  :

ما ميخواهيم دو دستور زير را انجام دهيم:

١- پيدا كردن رخدادهايي كه در آن يك مدير  (Manager)يك مشتري (Customer) هم ميباشد(Intersect).

٢- پيدا كردن رخدادهايي كه در آن مدير  (Manager)يك مشتري (Customer) نميباشد (Except).

Intersect :   اگر ما بخواهيم افرادي را كه در هر دو جدول Customer و Manager وجود دارند را پيدا كنيم و يك ليست متمايز را برگردانند ميتوانيم همانند دستور زير عمل كنيم:

مجموعه نتيجه در اينجا آمده است:

براي انجام چيزي مشابه همين كد با دستور با قاعده T-SQL، بايد كد زير را بنويسيم:

Except :  اگر ما بخواهيم افرادي را كه تنها در جدول Manager وجود دارند و در جدول Customer نميباشند را پيدا كنيم و ليستي متمايز برگرداند، ميتوانيم كد زير را اجرا كنيم:

مجموعه نتيجه در اينجا آمده است:

براي انجام چيزي مشابه همين كد با دستور با قاعده T-SQL، بايد كد زير را بنويسيم:

با توجه به دو مثال بالا ميتوانيم متوجه شويم كه استفاده از دستورات INTERSECT  و EXCEPTبسيار سادهتر از نوشتن حالتهاي Join ،Exists و Having To ميباشد.

ميتوان يك گام فراتر رفت اگريك جدول سومي (چهارمي و …) داشته باشيم كه شامل ليست SalesReps باشد و ما ميخواهيم مديراني( Manager) را پيدا كنيم كه مشتري( Customer) هستند اما SalesReps نميباشند، در اين صورت مانند زير عمل ميكنيم.

نمونه دادههاي جدول SalesReps :

مجموعه نتيجه در اينجا آمده است:

همانطور كه مشاهده كرديد اين راهي بسيار ساده براي تركيب و تطابق چنين حالتهايي ميباشد. علاوه بر اين ،شما ميتوانيد از عملگرهاي UNION و UNION ALL براي توسعه بيشتر مجموعه نتايج نهايي خود استفاده كنيد.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *