Bu Sayfayı Paylaş:

Kavram

Union

Tanım: SQL'de iki veya daha fazla select sonucunu birleştirmek için kullanılan ifade. Select ifadeleri içindeki sütunların tiplere göre sırası ve sayısı aynı olmalıdır. Varsayılan olarak select sonuçlarında birebir aynı olan kayıtlar tekrar edilmez

Kavram

Union All

Tanım: SQL'de birden fazla select sonucunu tekrarlı kayıtları içerecek şekilde birleştirmek için kullanılan ifade. Tek başına Union ifadesi tekrarlı kayıtlardan tekrarları dikkate almaz

Örnek

SQL'de Basit Bir Union Örneği

Aşağıda basit bir Union örneği görülmektedir : 

select ad from person 
union 
select member_adi from uye

Yukarıdaki sorgudan person tablosundan ad değerleri ile uye tablosundaki member_adi sütun değerleri birleşik olarak gelir. Eğer ad ile member_adi aynı ise kayıt sadece bir kere gösterilir. ad ve member_adi sütunların tipleri aynı olmasından dolayı birleştirilebilmektedir

 


Örnek

SQL'de Union All Örneği

Aşağıda basit bir Union All örneği gösterilmektedir : 

select ad from person 
union all
select member_adi from uye

Yukarıdaki sogudan person tablosundan ad değerleri ile uye tablosundaki member_adi sütun değerleri birleşik olarak gelir. Eğer ad ile member_adi aynı olsa bile sonuçta gösterilir. ad ve member_adi sütunların tipleri aynı olmasından dolayı birleştirilebilmektedir


İpucu

SQL Union İfadesi Tekrarlı (Duplicate) Kayıtların Sadece Birini Alır

SQL'de Union ifadesi iki select sonucu birebir aynı kayıt bilgileri ile geliyorsa sadece bir tane kayıt alınır. Tekrarlı olan diğer kayıtlar alınmaz. Tekrarlı kayıtlarıda almak isteniyorsa Union All ifadesi kullanılmalıdır


İpucu

Union ile Order İfadesinin Birlikte Kullanılabilmesi

Union ile birleştirdiğiniz sorgularda order kullanamazsınız. Örneğin aşağıdaki gibi bir sorgu hata verecektir:
select name from T1 where order by insert_date
union
select name from T2 where order by insert_date
MySQL de "Error Code: 1221. Incorrect usage of UNION and ORDER BY", SQL Server'da "Msg 156, Level 15, State 1, Line 5 Incorrect syntax near the keyword 'ORDER'" şeklinde bir hata alabilirsiniz.
Bu sıkıntıyı çözmek için sıralamayı aşağıdaki gibi yapabilirsiniz (MySQL kullandık örnek için) :
select * from (
select * from T1
union
select * from T2
) as A
order by insert_date
İki parça da kendi içinde sıralansın, o şekilde birleştirilsin isteyebilirsiniz. Örneğin aynı tablo içinde önce A ile başlayanlar gelsin ve bunlar insert_date göre sıralansın, sonra A ile başlamayanlar gelsin ve onlarda kendi aralarında insert_date'e göre sıralansın istiyorsanız yukarıdaki gibi bir yapıyı kullanamazsınız. Yukarıdaki yapı tüm sonucu tarihe göre sıralar ve ilk ve ikinci sorgu sonucu birbirine karışır. Bunu engellemek için aşağıdaki gibi yapabilirsiniz:
select * from (
select *, 1 as sira from T1 where name like 'A%'
union
select *, 2 as sira from T1 where name not like 'A%'
) as A
order by sira,insert_date;
Yukarıdaki sorguda önce A ile başlayanlar için sira sütun değeri olarak 1 verildi, diğer grup içinde 2 değeri verildi. Sıralamayı önce "sira" sütununa göre yapıldığı için sıralama sizin istediğiniz gibi olacaktır.




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir