Powered By Blogger

11 Temmuz 2018 Çarşamba

SQL veri tabanı için bir database ile başka bir database arasında güncelleme ve veri çekme...

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
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.Product
EXCEPT
SELECT 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
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 ProductID
 
FROM Production.Product
 
INTERSECT
 
SELECT ProductID
 
FROM 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 ProductID
 
FROM Production.Product
 
where 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 ProductID
 
FROM Production.Product p where exists(SELECT top 1 1
 
FROM Production.WorkOrder wo where p.ProductID=wo.ProductID)

8 yorum: