Alper ÇELİK

Bilgisayar Mühendisi

UNION & UNION ALL

Öncelikle kısa ve sade bir tanım yaparak bu yapıların ne amaçla kullanıldığını anlamlandıralım.
UNION ve UNION ALL operatörleri 2 ya da daha fazla sonuç kümesini birleştirmek için kullanılır..
 
Tabi arasında kalın çizgilerle ifade edilebilecek türden farklar vardır. Şimdi örneklerle bu yapıları tanımaya başlayalım..
 
Bakınız Resim-1.
 
CustomerA ve CustomerB isimli 2 tabloyu bu operatörlerle işleme soktuğumuzda:
 
Bakınız Resim-2.
 
Bakınız Resim-3.   
 
Örnek resimde görüldüğü gibi;
* UNION operatörü tekerrür eden satırları eleyerek benzersiz satırları getirmiş oldu.
* UNION ALL operatörü ise her tabloyu koşulsuz birleştirdi.
* O halde buradan hareketle şu sonucu çıkarabiliriz: UNION, UNION ALL'a göre yavaştır zira mükerrer satırları tekilleştirmekle iştigal ettiği için performans kaybı yaşar. (Execution plan'dan çalışmalarınızı gözlemleyiniz.)
 
Anahtar Not:  
SELECT ID, Email, Name FROM CustomerA
UNION ALL
SELECT ID, Name, Email FROM CustomerB   (yer değişiminden etkilenmez!)
 
* UNION ve UNION ALL operatörü ile çalışıyorsanız, birleşecek olan kolon adetleri, veri tipleri ve sıralamanın aynı olması hususunu gözetiyor olmanız gerekiyor. Ancak veri tipleri aynı ise yer değişimi gerçekleştirmenizde herhangi bir beis yoktur.  
 
 Anahtar Not2:
SELECT ID, Name, Email from CustomerA
ORDER BY Name (Yanlış kullanım yeri !)
UNION ALL
SELECT ID, Name, Email from CustomerB
Yukarıdaki örnek sorgu Order by elementinin yanlış yerde kullanımına örnek olarak verilmiştir. UNION ve UNION ALL operatörlerinde Order by elementi tüm SELECT elementlerinin en sonunda yer almalıdır.. Dolayısıyla doğru kullanım şekli şöyle olmalıdır:
 
SELECT ID, Name, Email from CustomerA
UNION ALL
SELECT ID, Name, Email from CustomerB
ORDER BY Name

Trigger Serisinin İlk Bölümüne Buradan Ulaşabilirsin

Trigger'lar özelleşmiş bir tür stored prosedürlerdir(SP).