Skip to main content

SQL UNION Kullanımı: Farklı Tablolardan Verileri Tek Sonuçta Birleştirme

💡 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, SQL’in UNION ve UNION ALL set operatörlerini kullanarak birden fazla tablodan gelen verileri tek bir sonuç kümesinde birleştirmeyi öğreneceksiniz.
Ayrıca, mükerrer kayıtların nasıl yönetileceğini, WHERE ile filtreleme ve ORDER BY ile sıralama yapmayı adım adım göreceksiniz.


⚙️ 1️⃣ Örnek Veritabanı ve Tabloları Oluşturma

Aşağıdaki örneklerde, bir kitap evi sisteminde hem satış hem de kiralama tablolarını birleştirerek UNION kullanımını test edeceğiz.

MySQL’e Bağlanın

mysql -u rabisu_dev -p

rabisu_dev kullanıcı adıyla MySQL sunucusuna bağlanır.

Veritabanı Oluşturun

CREATE DATABASE kitap_evi;
USE kitap_evi;

kitap_evi adında bir veritabanı oluşturur ve aktif hale getirir.

Satın Alma Tablosu


CREATE TABLE satinalma (
satinalma_id INT,
musteri_ad VARCHAR(30),
kitap_ad VARCHAR(40),
tarih DATE,
PRIMARY KEY (satinalma_id)
);

Kitap satın alan müşterilerin kayıtlarını tutar.

Kiralama Tablosu

CREATE TABLE kiralama (
kiralama_id INT,
musteri_ad VARCHAR(30),
kitap_ad VARCHAR(40),
baslangic_tarihi DATE,
bitis_tarihi DATE,
PRIMARY KEY (kiralama_id)
);

Kitap kiralayan müşterilerin kayıtlarını saklar.

Örnek Veriler

INSERT INTO satinalma VALUES
(1, 'samet', 'Uçurtma Avcısı', '2022-10-01'),
(2, 'samet', 'Sefiller', '2022-10-04'),
(3, 'samet', 'Dönüşüm', '2022-09-23'),
(4, 'ayşe', 'Simyacı', '2022-07-23'),
(5, 'ayşe', 'Yüz Yıllık Yalnızlık', '2022-10-01'),
(6, 'can', 'Uçurtma Avcısı', '2022-04-15'),
(7, 'can', 'Simyacı', '2022-10-13'),
(8, 'can', 'Sefiller', '2022-10-19');
INSERT INTO kiralama VALUES
(1, 'samet', 'Simyacı', '2022-09-14', '2022-11-14'),
(2, 'samet', 'Sefiller', '2022-10-01', '2022-12-31'),
(3, 'samet', 'Yüz Yıllık Yalnızlık', '2022-10-01', '2022-12-01'),
(4, 'ayşe', 'Uçurtma Avcısı', '2022-09-03', '2022-09-18'),
(5, 'ayşe', 'Suç ve Ceza', '2022-09-27', '2022-12-05'),
(6, 'deniz', 'Uçurtma Avcısı', '2022-10-01', '2022-11-15'),
(7, 'deniz', 'Sefiller', '2022-09-08', '2022-11-17'),
(8, 'deniz', 'Dönüşüm', '2022-09-04', '2022-10-23');

Her tabloya 8’er örnek kayıt eklendi.


🧩 2️⃣ UNION Operatörünü Anlamak

UNION, iki farklı SELECT sorgusunun sonuçlarını birleştirir ve mükerrer satırları otomatik olarak kaldırır.

Basit Örnek

SELECT musteri_ad FROM satinalma
UNION
SELECT musteri_ad FROM kiralama;

Her iki tablodaki benzersiz müşteri adlarını listeler.

Sonuç:

musteri_ad
samet
ayşe
can
deniz

📏 3️⃣ UNION Kuralları

KuralAçıklama
🎯 Sütun sayısı eşleşmeliHer iki SELECT sorgusu aynı sayıda sütun döndürmelidir.
🧩 Veri tipi uyumlu olmalıKarşılık gelen sütunların veri tipleri aynı olmalıdır.
🔁 Sütun sırası eşleşmeliFarklı sırada sütun seçilirse sonuçlar karışır.

Hatalı Örnek

SELECT musteri_ad, kitap_ad FROM satinalma
UNION
SELECT kitap_ad FROM kiralama;

⚠️ Hata:

“The used SELECT statements have a different number of columns.”

🔍 4️⃣ WHERE ve ORDER BY ile UNION Kullanımı

Birleştirme öncesi filtreleme ve sonrasında sıralama yapmak mümkündür.

WHERE ile Filtreleme

SELECT kitap_ad FROM satinalma
WHERE musteri_ad = 'samet'
UNION
SELECT kitap_ad FROM kiralama
WHERE musteri_ad = 'samet';

Sadece Samet’in satın aldığı veya kiraladığı kitapları getirir.

ORDER BY ile Sıralama

SELECT kitap_ad FROM satinalma
WHERE musteri_ad = 'samet'
UNION
SELECT kitap_ad FROM kiralama
WHERE musteri_ad = 'samet'
ORDER BY kitap_ad;

Sonuç listesini alfabetik olarak sıralar.

🔁 5️⃣ UNION ALL: Mükerrerleri Korumak

Bazen aynı kitabın hem satın alındığı hem kiralandığı durumları göstermek isteyebilirsiniz. Bu durumda UNION ALL kullanılır.

SELECT kitap_ad FROM satinalma
WHERE tarih = '2022-10-01'
UNION ALL
SELECT kitap_ad FROM kiralama
WHERE baslangic_tarihi = '2022-10-01'
ORDER BY kitap_ad;

UNION ALL aynı kayıtları koruyarak listeler.

Sonuç:

kitap_ad
Uçurtma Avcısı
Yüz Yıllık Yalnızlık
Yüz Yıllık Yalnızlık

💨 Performans Notu

UNION ALL, UNION’a göre daha hızlıdır çünkü mükerrer kontrolü yapmaz. Eğer tablolarında yinelenen veri yoksa UNION ALL tercih et.


❓ Sıkça Sorulan Sorular (SSS)

  1. UNION ile JOIN arasındaki fark nedir?

UNION satır bazında birleştirir, JOIN sütun bazında ilişkilendirir.

  1. UNION kaç tabloyu birleştirebilir?

İstediğiniz kadar. Birden fazla SELECT sorgusu zincirlenebilir.

  1. Sütun adları hangi tabloya göre belirlenir?

İlk SELECT sorgusundaki sütun adları esas alınır.

  1. Farklı veri tipleriyle UNION kullanabilir miyim?

Hayır, sütun tipleri uyumlu olmalıdır. Ancak MySQL bazı tiplerde (örneğin VARCHAR-TEXT) otomatik dönüşüm yapabilir.


🚀 Sonuç

Bu rehberle SQL UNION ve UNION ALL operatörlerini kullanarak farklı tablolardan gelen verileri birleştirmeyi öğrendiniz. Artık raporlamalarda tekrar eden verileri kontrol edebilir, birleşik sonuçlar oluşturabilirsiniz.