Cumartesi , 15 Aralık 2018

TSQL- EXCEPT ve INTERSECT Komutlari

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.

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;

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.

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.

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.

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.

SELECT ProductID

FROM Production.Product p where exists(SELECT top 1 1

FROM Production.WorkOrder wo where p.ProductID=wo.ProductID)

Hakkında ismailadar

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>