Except
Except operatörü de iki farklı sorgu sonucunun karşılaştırırken intersect operatöründen farklı olarak sadece ilk sonuç setinde olup ikici sorgu sonucunda olmayan kayıtları listelememizi sağlamaktadır. Except operatörünü kümeleri kullanarak şematize edecek olursak aşağıdaki gibi bir ifade ile karşılaşırız.
Except operatörü iki farklı sorgudan dönen sonuç kümelerini karşılaştırarak sadece ilk belirtilen sorgu sonucunda olan fakat ikinci sorgu sonucunda olmayan kayıtları listeler. Bunun örneklemek için az önce insersect için kullandığımız örneği inceleyelim.
1
2
3
4
5
| SELECT ProductID FROM Production.ProductEXCEPTSELECT ProductID FROM Production.WorkOrder |
Yukarıdaki sorgudan sadece Production.Product adlı tabloda olan fakat Production.WorkOrder adlı tabloda olamayan veriler listelenecektir.Except operatörünün kullanılmasıyla elde edilen sonucu NOT in ve Not exists operatörlerini kullanarak yazmak mümkündür. Örneğin;
1
2
3
4
| SELECT ProductID FROM Production.Product p where not exists (SELECT top 1 1 FROM Production.WorkOrder wo where p.ProductID=wo.ProductID) |
Ya da not in operatörü kullanılarak sorgu aynı sonucu verecek şekilde yeniden yazılabilir.
1
2
3
| SELECT ProductID FROM Production.Product p where ProductID not in(SELECT ProductID FROM Production.WorkOrder) |
Intersect
Intersect operatörü adında anlaşılacağı üzere iki farklı sorgu sonucunun kesişimini elde etmek için kullanılmaktadır. Yani iki sorgu sonucunu insersect operatörü ile birleştirdiğimizde her iki sorgu sonucunda da dönen kayıtlar listelenecektir. İki sorgu sonucunu iki farklı küme ile temsil edersek intersect operatörünü şu şekilde gösterebiliriz.
Intersect operatörü iki farklı sonuç kümesinde de ortak olan verilerin gösterilemsi için kullanılır. Şimdi konuyu pekiştirmke için bir örnek yapalım. Bunun için Adventureworks veritabanında bulunan ve içinde 504 kayıt olan Production.Product ve içinde 72591 adet kayıt olan Production.WorkOrder tablolarını kullanalım.
1
2
3
4
5
6
7
8
9
| SELECT ProductIDFROM Production.ProductINTERSECTSELECT ProductIDFROM Production.WorkOrder |
Yukarıdaki gibi her iki kayıt setinde ortak olan ProductID değerlerini sorgulandığımızda toplam 238 kayıt listelenmektedir.Çünkü her iki tabloda da var olan sadece 238 ortak kayıt bulunmaktadır.
Intersect operatörü kullanılışlı bir operatör olmasına rağmen aynı sonucu farklı şekillerde de elde etmek mümkündür. Örneğin en basit haliyle in veya exists operatörleri ile de aynı sonuca ulaşılabilir.
1
2
3
4
5
| SELECT ProductIDFROM Production.Productwhere ProductID in(SELECT ProductID FROM Production.WorkOrder) |
Yada exists operatörü kullanılarak sorgu aynı sonucu verecek şekilde yeniden yazılabilir.
1
2
3
4
5
| SELECT ProductIDFROM Production.Product p where exists(SELECT top 1 1FROM Production.WorkOrder wo where p.ProductID=wo.ProductID) |

Basarili.
YanıtlaSilBaya güzel başarılı
YanıtlaSilBaşarılı
YanıtlaSilgüzel
YanıtlaSil:-):-):-)
YanıtlaSilAdım adım anlatman çok iyi olmuş.
YanıtlaSilEllerine saglik gayet temiz ve basarili bi calisma
YanıtlaSilBaşarılı tebrikler
YanıtlaSil