Kurs
SQL evreninde, birden çok sorgudan gelen verileri birleştirme yeteneği temel bir gereksinimdir ve SQL bunu gerçekleştirmek için UNION ve UNION ALL gibi güçlü işlevler sunar.
Göreceğiniz gibi, SQL'de UNION ve UNION ALL işlevleri arasındaki ince farkları anlamak, verimli veri sorgulama ve yönetimi için zorunludur. Bu eğitim, SQL sorgularınızı optimize etmenize yardımcı olmak için eşlik eden veri kümelerini kullanarak temel benzerliklerini, farklarını ve kullanım senaryolarını açıklar.
Kısa Cevap: SQL UNION vs. UNION ALL
Temel fark, UNION'ın yinelenen kayıtları kaldırması, UNION ALL'ın ise tüm yinelenenleri dahil etmesidir. Bu ayrım yalnızca sorgu sonucundaki satır sayısını değiştirmekle kalmaz, aynı zamanda performansı da etkiler.
| Özellik | UNION | UNION ALL |
|---|---|---|
| Yinelenenler | Yinelenen kayıtları kaldırır | Tüm kayıtları tutar (yinelenenler dahil) |
| Performans | Daha yavaş (Yinelenenleri bulmak için veriyi sıralamak/karma oluşturmak gerekir) | Daha hızlı (Veriyi doğrudan sonuca ekler) |
| İşlem | Kümeler Kuramı (Matematiksel Birleşim) | Ekleme / Sonuçları Yığma |
İki örnek tablo düşünelim: employees_2023 ve employees_2024, iki farklı yıla ait çalışan kayıtlarını temsil ediyor.
SELECT *
FROM employees_2023
|
employee_id |
name |
department |
|
1 |
Alice |
HR |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
SELECT *
FROM employees_2024
|
employee_id |
name |
department |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
4 |
David |
Marketing |
Şimdi, iki tablomuzu UNION işlevini kullanarak birleştirelim.
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
name |
department |
|
1 |
Alice |
HR |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
4 |
David |
Marketing |
Bu sonuçta, yinelenen kayıtlar kaldırılmıştır. Şimdi bunu UNION ALL kullandıktan sonra elde ettiğimiz sonuçla karşılaştıralım.
SELECT employee_id, name, department FROM employees_2023
UNION ALL
SELECT employee_id, name, department FROM employees_2024;
|
employee_id |
name |
department |
|
1 |
Alive |
HR |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
2 |
Bob |
IT |
|
3 |
Charlie |
Finance |
|
4 |
David |
Marketing |
Bu sonuçta, tüm kayıtlar dahil edilir ve yinelenenler kaldırılmaz.
SQL'de UNION nedir?
UNION işlevi, iki veya daha fazla SELECT sorgusunun sonuçlarını tek bir sonuç kümesinde birleştirir ve yinelenen satırları kaldırır. UNION içindeki her bir SELECT ifadesinin aynı sayıda sütuna sahip olması gerekir. Ayrıca veri türleri benzer olmalı ve sütunlar da aynı sırada yer almalıdır. İşlevi anlamak için aşağıda iki örnek tablo oluşturalım.
CREATE TABLE sales_team (
employee_id INT,
employee_name VARCHAR(50)
);
INSERT INTO sales_team (employee_id, employee_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
CREATE TABLE support_team (
employee_id INT,
employee_name VARCHAR(50)
);
INSERT INTO support_team (employee_id, employee_name) VALUES
(3, 'Charlie'),
(4, 'David'),
(5, 'Eve');
Yukarıdaki kod, bu eğitimde kullanacağımız iki tabloyu, sırasıyla sales_team ve support_team tablolarını oluşturacaktır. Tabloları aşağıdaki kodla görüntüleyebilirsiniz.
SELECT *
FROM sales_team

sales_team tablosundaki kayıtlar. Görsel: Yazar
SELECT *
FROM support_team

support_team tablosundaki kayıtlar. Görsel: Yazar
Bunlar, her birinde üçer kayıt bulunan küçük tablolardır ve sütun adları kendini açıklayıcıdır. Artık iki tablomuzu oluşturduğumuza göre UNION işlevini uygulayalım.
SELECT employee_id, employee_name
FROM sales_team
UNION
SELECT employee_id, employee_name
FROM support_team;

UNION işlevinden çıkan sonuç. Görsel: Yazar
3 değerini alan yinelenen employee_id girdisinin kaldırıldığını görebilirsiniz.
SQL'de UNION için Kullanım Senaryoları Nelerdir?
UNION işlevinin yaygın kullanım senaryoları şunlardır.
-
Farklı Tablolardan Sonuçları Birleştirme: Birden fazla tablodan veri birleştirip yinelenen kayıtların olmadığından emin olmak istediğinizde
UNIONbaşvurulacak işlemdir. -
Farklı Veri Kaynaklarını İşleme:
UNION, farklı veri kaynaklarından gelen tabloları birleştirirken kullanışlıdır. -
Sorgular Arasında Yinelenenleri Kaldırma: Birleştirilen sonuç kümesinin benzersiz olmasını istediğinizde
UNIONkullanın.
SQL'de UNION ALL nedir?
UNION ALL işlevi, iki veya daha fazla SELECT sorgusunun sonuçlarını, tüm yinelenen satırlar dahil olacak şekilde birleştirir. Yinelenenleri kaldırma zahmetine girmediği için bu işlev UNION'dan daha hızlıdır.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;

UNION ALL işlevinden çıkan sonuç. Görsel: Yazar
Bu durumda, yinelenen girdilerin tekrarlandığını ve kaldırılmadığını görebilirsiniz.
SQL'de UNION ALL için Kullanım Senaryoları Nelerdir?
UNION ALL işlevinin yaygın kullanım senaryoları şunlardır.
- Yinelenenlerle Birlikte Sonuçları Birleştirme: Birden fazla sorgudan gelen sonuçları birleştirirken tüm yinelenen satırları korumanız gerektiğinde
UNION ALLkullanın. - Performans Hususları:
UNION ALL, yinelenenleri kaldırma gibi ek bir adıma ihtiyaç duymadığı içinUNIONişlevinden daha zaman etkilidir. - Farklı Dönemlerden Verileri Birleştirme: Farklı dönemlerden veya kaynaklardan veri birleştirirken ve yinelenen girdileri korumanız gerektiğinde
UNION ALLtercih edilir. - Raporlama ve Analiz: Yinelenenler dahil her bir kaydın gerekli olduğu raporlama amaçları için
UNION ALLuygundur.
UNION ve UNION ALL: Benzerlikler ve Farklar
Benzerliklerin ve farkların bir özet tablosunu oluşturalım.
|
Özellik |
UNION |
UNION ALL |
|
Yinelenen satırlar |
Kaldırılır |
Dahil edilir |
|
Performans |
Daha yavaş |
Daha hızlı |
|
Kullanım Durumu |
Benzersiz kayıtlara ihtiyaç duyduğunuzda |
Tüm kayıtlara ihtiyaç duyduğunuzda |
|
Sonuç Boyutu |
Daha küçük |
Daha büyük |
SQL Diyalektlerinde UNION ve UNION ALL Söz Dizimi Farkları
Temel söz dizimi farklı SQL diyalektlerinde aynı kalsa da, platforma bağlı olarak küçük farklılıklar vardır. Koda bakarsanız, SQL Server, Oracle, MySQL, PostgreSQL veya BigQuery gibi çoğu platformda kod aşağıda gösterilene benzer görünecektir.
SELECT employee_id, employee_name
FROM sales_team
UNION ALL
SELECT employee_id, employee_name
FROM support_team;
Bu SQL diyalektlerindeki temel komutlar aynı kalır, ancak bazı nüanslar ve farklar bulunur:
- NULL'ların ve Sıralamaların (Collation) İşlenmesi: Farklı SQL diyalektleri,
NULLdeğerleri ve metin sıralamaları için farklı kurallara sahip olabilir. - Performans Optimizasyonları: Performans optimizasyonları ve yürütme verimliliği değişiklik gösterebilir.
- Hata İşleme ve Uyarılar: Bu işlevler kullanılırken farklı diyalektler hataları ve uyarıları farklı biçimde ele alabilir.
- Platforma Özgü İşlev ve Özellikler: Bazı SQL diyalektleri, daha karmaşık senaryolar için
UNIONveUNION ALLile birlikte kullanılabilecek ek işlevler veya özellikler sunabilir.
Dağıtık bir ortamda çalışan PySpark söz konusu olduğunda komut anlamlı ölçüde farklıdır. Aşağıda, yukarıda oluşturduğumuz iki tabloyu içeren iki veri çerçevesinin adlarının df1 ve df2 olduğunu varsayarak verilen kod bulunmaktadır. :
df1.union(df2)
SQL UNION Kullanırken 3 Kural ve Yaygın Hatalar
UNION ve UNION ALL güçlü olmakla birlikte söz dizimi konusunda katıdır. Sorgunuz bir hata döndürüyorsa, muhtemelen şu üç altın kuraldan birini ihlal ediyordur.
1. Sütun Sayısı Uyumsuzluğu
Kullanıcıların en sık karşılaştığı hata sütun sayısının uyuşmamasıdır. İki veri kümesini birleştirmek için tabloların "şeklinin" özdeş olması gerekir. 3 sütunlu bir tabloyu 2 sütunlu bir tablonun üzerine yığamazsınız.
Hata:
-- This will fail because the column counts do not match
SELECT employee_id, name, department
FROM employees_2023
UNION
SELECT employee_id, name
FROM employees_2024;
Çözüm: Her iki SELECT ifadesinin de tam olarak aynı sayıda sütun istediğinden emin olun. İkinci tabloda veri eksikse (ör. department), sayıları eşleştirmek için yer tutucu olarak NULL seçebilirsiniz:
SELECT employee_id, name, department FROM employees_2023
UNION
SELECT employee_id, name, NULL as department FROM employees_2024;
2. Veri Türü Uyumluluğu
SQL sonuçları konuma göre birleştirir, sütun adına göre değil. İlk sorgunuzdaki birinci sütunun veri türü, ikinci sorgunuzdaki birinci sütunun veri türüyle eşleşmeli (veya uyumlu) olmalıdır.
Hata: Sütunların sırasını yanlışlıkla değiştirirseniz, SQL bir Sayı (ID) ile bir Metni (Ad) üst üste koymaya çalışır ve bu da veri türü dönüştürme hatasına yol açar.
-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)
SELECT employee_id, name FROM employees_2023
UNION
SELECT name, employee_id FROM employees_2024;
Çözüm: SELECT ifadelerinin her birinde sütunların tam olarak aynı sırada listelendiğini, UNION içinde her zaman doğrulayın.
3. ORDER BY Sınırlamaları
ORDER BY ifadesinin nereye yerleştirileceği sıkça kafa karıştırır. Bir UNION işlemi içindeki alt sorguları ayrı ayrı sıralayamazsınız; yalnızca nihai birleşik sonucu sıralayabilirsiniz.
Hata: Nihai sorgudan önce ORDER BY kullanmak söz dizimi hatası verir.
-- INCORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
ORDER BY employee_id -- You cannot sort here!
UNION
SELECT employee_id, name FROM employees_2024;
Çözüm: ORDER BY ifadesini sorgunuzun en sonuna yerleştirin. Bu, sıralamayı tüm birleşik sonuç kümesine uygular.
-- CORRECT SYNTAX
SELECT employee_id, name FROM employees_2023
UNION
SELECT employee_id, name FROM employees_2024
ORDER BY employee_id; -- Sorts the final result
Son Düşünceler
SQL kullanarak verileri verimli şekilde yönetmek için UNION ile UNION ALL'ın uygulamasını anlamak esastır. UNION yalnızca benzersiz kayıtları seçerken, UNION ALL hepsini seçer; bu da performansı ve sonuç kümesinin boyutunu etkiler. Özel gereksinimleriniz için uygun işlevi seçmek üzere bu bilgiyi kullanın.
Daha fazla öğrenmek için aşağıdaki kaynakları incelemeyi düşünebilirsiniz:
- SQL'e Giriş: İlişkisel veritabanları oluşturmayı ve SQL kullanarak sorgulamayı öğrenin.
- SQL Temelleri: Verinizle etkileşim kurmak ve sorgulamak için gereken temel SQL becerilerini edinin.
- SQL Associate Sertifikası: Bir veritabanından uygun verileri çıkararak ve bunları yaygın veri sorularını yanıtlamak için kullanarak SQL yeteneğinizi gösterin.
- Orta Düzey SQL: Bu uygulamalı kursla, verileri kendi SQL kodunuzla analiz etmek için bugün bilmeniz gereken her şeyi öğreneceksiniz.

Veri bilimi, yapay zeka, analitik ve veri stratejisi alanlarında deneyimli bir profesyonel.
Sıkça Sorulan Sorular
SQL UNION ve UNION ALL arasındaki temel fark nedir?
UNION yinelenen kayıtları kaldırırken, UNION ALL tüm yinelenenleri içerir.
UNION ve UNION ALL arasında performans farkı var mı?
Evet, UNION genellikle daha yavaştır çünkü yinelenenleri kaldırır.
UNION ALL'ın UNION'a tercih edildiği belirli kullanım durumları var mı?
UNION ALL, raporlama ve analiz gibi yinelenenler dahil tüm kayıtlara ihtiyaç duyduğunuz durumlarda tercih edilir.
SQL UNION'ı UNION ALL yerine ne zaman kullanmalıyım?
Yinelenenler olmadan birleştirilmiş bir sonuç kümesine ihtiyacınız olduğunda UNION kullanın.
Farklı SQL diyalektleri UNION ve UNION ALL kullanımını nasıl etkiler?
Temel söz dizimi tutarlı olsa da, performans, NULL'ların işlenmesi ve sıralama (collation) konularında SQL diyalektleri arasında küçük farklılıklar olabilir.