Bu yazı SQL Server’da EXCEPT, INTERSECT, UNION ve UNION ALL ifadelerini kullanımını anlatmaya çalışacağım. (Örnekler için Microsoft’un sağladığı AdventureWorks2016 örnek veri tabanını kullanacağım)
EXCEPT ve INTERSECT ifadeleri UNION ve UNION ALL kadar çok kullanılmasa kullanıldıkları yerlere göre çok etkili ifadelerdir. 4 ifadenin de kullanımı aynıdır sadece yaptıkları işler birbirlerine göre farklılık gösterir.
EXCEPT Komutu
Bu komut 2 SQL sorgusu içinde birinde olup diğerinde olmayan kayıtları listelemek için kullanılır. Örneğin ürünler tablosunda olup satışlar tablosunda olmayan kayıtları listelemek için kullanabiliriz:
SELECT ProductID FROM Product
EXCEPT
select ProductID from SalesOrderDetail
Aynı cevabı NOT IN kullanarak da alabilirdik fakat EXCEPT ifadesinde istediğiniz kadar alan verip sorgulama yapabilirsiniz. Tek dikkat etmeniz gereken iki sorguda da aynı sayıda ifade olması ve sütunların tiplerinin birbirleriyle uyumlu olmasıdır. Şimdi de liste fiyatından farklı satılan ürünleri bulmak için bir sorgu yazalım:
SELECT ProductID, UnitPrice FROM SalesOrderDetail
EXCEPT
SELECT ProductID, ListPrice FROM Product
EXCEPT ifadesinden dönen sonuçları bir tablo gibi görüp dönen sonuçlar üzerinden de yeni sorgular türetebilirsiniz.
INTERSECT Komutu
INTERSECT komutunu EXCEPT ifadesinin tam tersi düşünebilirsiniz. EXCEPT komutu nasıl 2 sorgunun farklarını veriyorsa INTERSECT komutu da 2 sorgunun eşlerini veriyor. Kümelerin kesişimi gibi düşünebilirsiniz. Önceki örnekten yola çıkarak liste fiyatına satılmış ürünlerin listesini alabiliriz:
SELECT ProductID, UnitPrice FROM SalesOrderDetail
INTERSECT
SELECT ProductID, ListPrice FROM Product
UNION ve UNION ALL Komutu
UNION ve UNION ALL komutları tabloları birleştirmek için kullanılırlar. Komutların kullanımları da öncekiler gibi aynıdır. İkisinin arasındaki tek fark UNION ifadesinde tekrar eden kayıtlar yer almaz fakat UNION ALL ifadesi bu şartı aramaz ve tekrar eden kayıtları da getirir.
SELECT ProductID, UnitPrice FROM SalesOrderDetail
UNION
SELECT ProductID, ListPrice FROM Product
SELECT ProductID, UnitPrice FROM SalesOrderDetail
UNION ALL
SELECT ProductID, ListPrice FROM Product
Bu yazıda EXCEPT, INTERSECT, UNION ve UNION ALL ifadelerinin kullanımlarını öğrenmiş olduk.