Sql Server 2008, T-SQL diline yapılmış birkaç ek geliştirme ile birlikte geldi. Daha önce yazdığım şu makaleden SQL Server 2008 MERGE operatörü hakkında bilgi alabilirsiniz.
Bugün yazacağım yazı ile EXCEPT ve INTERSECT operatörlerini inceleyeceğim.
Hem EXCEPT, hem de INTERSECT operatörü iki farklı sorgunun karşılaştırılması ve bir sonuç kümesi döndürülmesi ilkesi ile çalışır.
EXCEPT anahtar kelimesi ile, bir sorgunun sonuç kümesinde olan, fakat diğer sorgunun sonuç kümesinde kesinlikle olmayan kayıtları buluruz.
TABLO1’de bulunup, TABLO2’de bulunmayan kayıtlar
SELECT * FROM TABLO1 EXCEPT SELECT * FROM TABLO2</pre>
TABLO2’de bulunup, TABLO1’de bulunmayan kayıtlar
SELECT * FROM TABLO2 EXCEPT SELECT * FROM TABLO1
INTERSECT anahtar kelimesi ile ise, her iki sorgunun sonuç kümesinde de kesinlikle olan kayıtları bulabiliriz.
Hem TABLO1’de bulunup, hem de TABLO2’de bulunan kayıtlar
SELECT * FROM TABLO1 INTERSECT SELECT * FROM TABLO2
Bir örnek ile daha iyi anlaşılacak. Öncelikle Personel ve Stajer tablolarımızı oluşturalım.
CREATE TABLE dbo.Personel ( ID INT NOT NULL IDENTITY, AdSoyad VARCHAR(100) NOT NULL, SicilNo CHAR(6) NOT NULL, EMail VARCHAR(100) NOT NULL, IseGirisTarihi SMALLDATETIME NOT NULL, YoneticiID INT NOT NULL, DepartmanID NOT NULL )
CREATE TABLE dbo.Stajer ( ID INT NOT NULL IDENTITY, AdSoyad VARCHAR(100) NOT NULL, StajerNo CHAR(6) NOT NULL, EMail VARCHAR(100) NOT NULL, StajBaslangicTarihi SMALLDATETIME NOT NULL, YoneticiID INT NOT NULL, StajDepartmanID NOT NULL )
İlk olarak, staj yapmamış personel’in adını seçeceğimiz sorguyu yazalım;
SELECT AdSoyad FROM dbo.Personel EXCEPT SELECT AdSoyad FROM dbo.Stajer
İkinci olarak, işe başlamamış olan stajer’lerin adını seçeceğimiz sorguyu yazalım;
SELECT AdSoyad FROM dbo.Stajer EXCEPT SELECT AdSoyad FROM dbo.Personel
Son olarak, hem staj yapıp, hem de işe başlamış olan personel’in adını seçeceğimiz sorguyu yazalım;
SELECT AdSoyad FROM dbo.Personel INTERSECT SELECT AdSoyad FROM dbo.Stajer
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484