UNION ve UNION ALL ifadeleriyle input kümelerinde işlem yaparken bir kümede olup da diğerinde olmayan veya yalnızca her ikisinde olan satırları çekebilirsiniz. Böyle durumlar için EXCEPT ve INTERSECT operatörlerini kullanmak yararlı olacaktır. Bu bölümde EXCEPT ve INTERSECT operatörlerinin nasıl kullanıldığını öğreneceğiz.

INTERSECT Operatörünü

SQL Server 2005 ile gelen T-SQL INTERSECT operatörü, yalnızca her iki input kümesinde bulunan satırları döndürür.

Not: UNION operatörü hem DISTINCT hem de ALL biçimini destekliyor. Ancak INTERSECT şu anda yalnızca implicit olarak DISTINCT seçeneğinde destekleniyor. Ayrıca bu operatörle yapılan işlemde tekrarlı satırlar döndürülmez.

Aşağıdaki örnekte, müşteriler ve tedarikçiler arasındaki ortak coğrafi bilgileri çekmek için INTERSECT operatörü kullanılmaktadır. Customers tablosunda 91 ve Suppliers tablosunda 29 satır bulunuyor:

SELECT country, city
FROM Production.Suppliers
INTERSECT
SELECT country, city
FROM Sales.Customers; 

Dönen sonuç:

country city
-------- ---------
Germany Berlin
UK London
Canada Montréal
France Paris
Brazil Sao Paulo
 (5 row(s) affected) 
EXCEPT Operatörü

EXCEPT operatörü, kümelerden sadece birinde bulunan benzersiz satırları döndürür. EXCEPT özellikle sorguda ilk sırada listelenen input kümesindeki satırları döndürür. LEFT OUTER JOIN veya RIGHT OUTER JOIN kullanan sorgularda input’ların listelendiği sıra önemlidir.

Aşağıdaki örnekte, Customers ve Suppliers tablolarından ortak olmayan coğrafi verileri çekmek için EXCEPT kullanılarak önceki örnek üzerine geliştirme yapılmıştır. Customers tablosunda 91 satır ve Suppliers tablosunda 29 satır vardır. Sorgu, sıra olarak önce gelen Suppliers tablosuyla işleme başlar:

SELECT country, city
FROM Production.Suppliers
EXCEPT
SELECT country, city
FROM Sales.Customers; 

24 satır döndürüldü. Sonuç kümesinin bir kısmı:

country city
---------- -------------
Australia Melbourne
Australia Sydney
Canada Ste-Hyacinthe
Denmark Lyngby
Finland Lappeenranta
France Annecy
France Montceau
 (24 row(s) affected) 

Tabloların sırası değiştirildiğinde sonuçlar farklı çıkacaktır:

SELECT country, city
FROM Sales.Customers
EXCEPT
SELECT country, city
FROM Production.Suppliers; 

Bu sorgudan 64 satır döndürüldü. EXCEPT kullanırken input kümelerinin sırasına dikkat edin.

Kaynak:
Set Operators – EXCEPT and INTERSECT (Transact-SQL)