Ana içeriğe atla

SQL'de UNION ve UNION ALL

UNION ve UNION ALL arasındaki çıktı ve performans farklarını keşfedin: UNION yinelenenleri kaldırır, UNION ALL ise onları dahil eder.
Güncel 22 Nis 2026  · 8 dk. oku

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

Records in the <code624

sales_team tablosundaki kayıtlar. Görsel: Yazar 

SELECT * 
FROM support_team

Records in the <code624

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;

Output from the <code624

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 UNION baş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 UNION kullanı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;

Output from the <code624

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 ALL kullanın.
  • Performans Hususları: UNION ALL, yinelenenleri kaldırma gibi ek bir adıma ihtiyaç duymadığı için UNION iş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 ALL tercih edilir.
  • Raporlama ve Analiz: Yinelenenler dahil her bir kaydın gerekli olduğu raporlama amaçları için UNION ALL uygundur.

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:

  1. NULL'ların ve Sıralamaların (Collation) İşlenmesi: Farklı SQL diyalektleri, NULL değerleri ve metin sıralamaları için farklı kurallara sahip olabilir.
  2. Performans Optimizasyonları: Performans optimizasyonları ve yürütme verimliliği değişiklik gösterebilir.
  3. Hata İşleme ve Uyarılar: Bu işlevler kullanılırken farklı diyalektler hataları ve uyarıları farklı biçimde ele alabilir.
  4. Platforma Özgü İşlev ve Özellikler: Bazı SQL diyalektleri, daha karmaşık senaryolar için UNION ve UNION ALL ile 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.

Vikash Singh's photo
Author
Vikash Singh
LinkedIn

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.

Konular

DataCamp ile SQL Öğrenin

Kurs

Data Manipulation in SQL

4 sa
317.3K
Master the complex SQL queries necessary to answer a wide variety of data science questions and prepare robust data sets for analysis in PostgreSQL.
Ayrıntıları GörRight Arrow
Kursa Başla
Devamını GörRight Arrow