EXCEPT در SQL Server برای استثناء گرفتن مجموعه ای از ردیف ها از مجموعه دیگر استفاده می شود. در واقع، این عمل تفاضل مجموعه ها را در تئوری مجموعه ها انجام می دهد.
فرض کنید دو جدول به نام Customers و HighSpenders در پایگاه داده خود دارید. جدول Customers شامل ستونهای CustomerID، CustomerName و TotalSpent است. جدول HighSpenders شامل CustomerID برای مشتریانی است که در یک دوره خاص بیش از مقدار مشخصی خرج کردهاند.
هدف شما نمایش لیستی از تمام مشتریان است، به جز مشتریانی که در جدول HighSpenders قرار دارند (یعنی مشتریانی که جزو خرج کنندگان بالا نیستند).
در اینجا یک پرس و جوی SQL با استفاده از EXCEPT برای دستیابی به این هدف ارائه میشود:
SQL
SELECT CustomerID, CustomerName, TotalSpent
FROM Customers
EXCEPT
SELECT CustomerID
FROM HighSpenders;
 توضیح:
- این پرس و جو از دو بخش تشکیل شده است که با 
EXCEPTاز هم جدا شدهاند. - بخش اول: 
- تمام ستونهای مورد نیاز را از جدول 
Customersانتخاب میکند. 
 - تمام ستونهای مورد نیاز را از جدول 
 - بخش دوم: 
- فقط ستون 
CustomerIDرا از جدولHighSpendersانتخاب میکند. 
 - فقط ستون 
 
نکات:
- این پرس و جو به طور واضح و خوانا با استفاده از نامهای کامل توابع و کلمات کلیدی نوشته شده است.
 - ستونهای انتخاب شده در هر دو بخش باید با هم مطابقت داشته باشند (در این مثال، هر دو بخش فقط 
CustomerIDرا انتخاب میکنند). - پرس و جو به طور کامل با توضیحات و تفاسیر ارائه شده است.
 
نتیجه:
این پرس و جو خروجی زیر را برمیگرداند که شامل اطلاعات مشتریانی است که در جدول HighSpenders وجود ندارند (یعنی مشتریانی با هزینه کمتر از حد تعیین شده):
| CustomerID | CustomerName | TotalSpent | 
|---|---|---|
| 3 | Alice Smith | 200.00 | 
| 5 | David Miller | 150.00 | 
| 7 | Emily Jones | 100.00 | 
همانطور که مشاهده میکنید، EXCEPT به شما امکان میدهد ردیفهای موجود در یک مجموعه را از ردیفهای موجود در مجموعه دیگر حذف کند و نتیجه را نمایش دهد. این برای یافتن تفاوت بین دو مجموعه داده مفید است.
مثالهای دیگر:
- میتوانید از 
INTERSECTبه جایEXCEPTاستفاده کنید تا فقط ردیفهای موجود در هر دو مجموعه را نمایش دهد. - میتوانید از 
WHEREclause در هر دو بخشEXCEPTبرای فیلتر کردن بیشتر دادهها استفاده کنید. - میتوانید از 
ORDER BYclause برای مرتبسازی نتایج استفاده کنید. - میتوانید از 
LIMITclause برای محدود کردن تعداد ردیفهای برگشتی استفاده کنید. 
منابع:
- https://learn.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql?view=sql-server-ver16
 - https://www.w3schools.com/sql/sql_ref_not.asp
 - https://stackoverflow.com/questions/43942911/using-except-and-distinct-in-sql-server
 
 
 


