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ı
| Kural | Açıklama |
|---|---|
| 🎯 Sütun sayısı eşleşmeli | Her 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şmeli | Farklı 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)
- UNION ile JOIN arasındaki fark nedir?
UNION satır bazında birleştirir, JOIN sütun bazında ilişkilendirir.
- UNION kaç tabloyu birleştirebilir?
İstediğiniz kadar. Birden fazla SELECT sorgusu zincirlenebilir.
- Sütun adları hangi tabloya göre belirlenir?
İlk SELECT sorgusundaki sütun adları esas alınır.
- 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.