SQL Server’da Union ve Union All Operatörleri Arasındaki Farklar
Herkese merhaba,
Bu başlık altında SQL Server’da Union ve Union All operatörleri arasındaki farkları inceleyeceğiz.
Union operatörü birleşen iki tabloda tekrarlanan satırları getirmezken Union All operatörü tekrarlanan satırları da getirir.
Konuyu daha iyi anlamak adına örnekler yapalım.
Örnek 1
DECLARE @Tablo1 AS TABLE (
ID INT
,Ad VARCHAR(10)
,Telefon VARCHAR(12)
)
DECLARE @Tablo2 AS TABLE (
ID INT
,Ad VARCHAR(10)
,Telefon VARCHAR(12)
)
INSERT INTO @Tablo1
VALUES (1, 'Yavuz', '88996655')
INSERT INTO @Tablo1
VALUES (2, 'Selim', '99986655')
INSERT INTO @Tablo2
VALUES (1, 'Hasan', '88446655')
INSERT INTO @Tablo2
VALUES (2, 'Selim', '99986655')
SELECT
*
FROM @Tablo1
UNION
SELECT
*
FROM @Tablo2
Görüldüğü üzere Union yapıldığı zaman 3 adet veri gelecektir. Aynı işlemi Union All ile yaparsak.
DECLARE @Tablo1 AS TABLE (
ID INT
,Ad VARCHAR(10)
,Telefon VARCHAR(12)
)
DECLARE @Tablo2 AS TABLE (
ID INT
,Ad VARCHAR(10)
,Telefon VARCHAR(12)
)
INSERT INTO @Tablo1
VALUES (1, 'Yavuz', '88996655')
INSERT INTO @Tablo1
VALUES (2, 'Selim', '99986655')
INSERT INTO @Tablo2
VALUES (1, 'Hasan', '88446655')
INSERT INTO @Tablo2
VALUES (2, 'Selim', '99986655')
SELECT
*
FROM @Tablo1
UNION ALL
SELECT
*
FROM @Tablo2
Burada görüldüğü üzere ise 4 adet sonuç dönmüş oldu. Union’da benzer kayıtları getirmedi. Union All’da ise getirmiş oldu.
Örnek 2
CREATE DATABASE UnionveUnionAllOrnekDatabase
GO
USE UnionveUnionAllOrnekDatabase
GO
CREATE TABLE dbo.Musteriler (
MusteriID INT
,Ad VARCHAR(50)
,Sehir VARCHAR(50)
)
GO
INSERT INTO dbo.Musteriler
VALUES (1, 'Yavuz Selim', 'İstanbul'), (2, 'Selim Kart', 'Konya')
GO
CREATE TABLE dbo.Calisanlar (
CalisanID INT
,CalisanAd VARCHAR(50)
,Sehir VARCHAR(50)
)
GO
INSERT INTO dbo.Calisanlar
VALUES (1, 'Selim Kart', 'Konya'), (2, 'Mustafa Kart', 'İstnabul'), (3, 'Fevziye Kart', 'Konya'), (4, 'Bilge Nuray Kart', 'İstanbul')
GO
SELECT
Ad
FROM dbo.Musteriler
UNION
SELECT
CalisanAd
FROM dbo.Calisanlar
Union operatörü ile 5 adet sonuç geldi. Union All ile aynı işlemi yapalım. Veri tabanını tekrar oluşturmuyoruz. Buna dikkat edelim.
SELECT
Ad
FROM dbo.Musteriler
UNION ALL
SELECT
CalisanAd
FROM dbo.Calisanlar
Not : Eğer iki tablo içinde tekrar etmeyen veri olduğundan emin iseniz Union All kullanmanızı öneririm. Union kullanırsanız sizin için daha maliyetli bir kod olabilir.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.