Bu çalışma materyali, ders kaydı ve kopyalanmış metin kaynaklarından derlenmiştir.
Veritabanı Birleştirmeleri (JOIN İşlemleri) 📚
Giriş: Birleştirme İhtiyacı ve Genel Bakış
İlişkisel veritabanı yönetim sistemlerinde veriler genellikle birden fazla tabloda organize edilir. Bu tablolar arasında tanımlanmış ilişkiler bulunur. Ancak bazen, tek bir sorguda birden fazla tablodan bilgiye ihtiyaç duyulur. Örneğin, bir öğretmenin sadece bölüm kimlik numarasını (BolumID) değil, aynı zamanda bölüm adını da görmek istediğimizde, farklı tablolardaki verileri bir araya getirme gereksinimi ortaya çıkar. İşte bu noktada birleştirme komutları (JOIN işlemleri) devreye girer. Bu işlemler, ilişkili tablolardaki verileri anlamlı ve bütünsel bir şekilde sunmak için kritik öneme sahiptir.
JOIN Kavramı ve Temel Kullanımı
📚 Tanım: JOIN, iki veya daha fazla tabloyu ortak bir alan (genellikle birincil anahtar veya yabancı anahtar) üzerinden birleştirerek veri çekmemizi sağlayan bir SQL komutudur. Bu sayede, farklı tablolarda yer alan veriler birbirine bağlanarak tek bir sonuç kümesinde görüntülenebilir.
✅ Genel Sözdizimi:
SELECT Sütun1, Sütun2,...SütunN
FROM Tablo1
JOIN_Türü Tablo2 ON Tablo1.OrtakSütun = Tablo2.OrtakSütun;
SELECTifadesinden sonra listelenmek istenen sütunlar yazılır.FROMifadesinden sonra birleştirmede kullanılacak ilk tablonun adı belirtilir.JOIN_Türüifadesi, kullanılacak birleştirme tipini (INNER, LEFT, RIGHT, FULL vb.) gösterir.ONkomutu, tablolar arasındaki eşleşme şartını tanımlar.
📊 Birleştirme Türleri: SQL'de çeşitli birleştirme türleri bulunmaktadır. Her bir tür, farklı veri çekme senaryolarına uygun çözümler sunar:
- INNER JOIN (ya da sadece JOIN)
- LEFT JOIN (LEFT OUTER JOIN)
- RIGHT JOIN (RIGHT OUTER JOIN)
- FULL JOIN (FULL OUTER JOIN)
- CROSS JOIN
- SELF JOIN
- UNION, INTERSECT, EXCEPT (Bunlar daha çok küme işlemleri olup, birleştirme mantığına yakın kullanılırlar.)
Temel Birleştirme Türleri ve Uygulamaları
1. INNER JOIN (İç Birleştirme)
📚 Tanım: INNER JOIN, iki tablo arasında belirtilen alana göre eşleşen kayıtları getirir.
✅ Çalışma Prensibi: Bir kayıt hem birinci tabloda hem de ikinci tabloda mevcutsa sonuçta gösterilir; eğer kaydın tablolardan birinde karşılığı yoksa sonuç listesine dahil edilmez. Yani, her iki tablodaki ortak alanlara sahip kayıtlar birleştirilir ve yalnızca kesişim kümesi döndürülür.
💡 Örnek Senaryo: Öğretmenlerin adını, soyadını ve görev yaptıkları bölümün adını listelemek istediğimizde, tblOgretmen tablosundaki BolumID ile tblBolum tablosundaki BolumID'yi eşleştiririz.
-- Öğretmenlerin sadece BölümID'lerini gösteren başlangıç sorgusu
SELECT ad, soyad, BolumID FROM tblOgretmen;
-- INNER JOIN ile Öğretmen Adı, Soyadı ve Bölüm Adını Listeleme
SELECT O.Ad, O.Soyad, B.BolumAd
FROM tblOgretmen AS O
INNER JOIN tblBolum AS B ON O.BolumID = B.BolumID;
Yukarıdaki sorguda AS O ve AS B tablo takma adları (alias) kullanılarak sorgu daha kısa ve okunabilir hale getirilmiştir.
Ek Örnek: Belirli şehirlerdeki öğrencilerin bölüm başına sayısını listeleme:
SELECT B.BolumAd, O.Adres, COUNT(*) AS 'Öğrenci Sayısı'
FROM tblOgrenci AS O
INNER JOIN tblBolum AS B ON O.BolumID = B.BolumID
WHERE O.Adres IN ('İstanbul','İzmir','Ankara')
GROUP BY B.BolumAd, O.Adres;
2. LEFT JOIN (Sol Birleştirme)
📚 Tanım: LEFT JOIN, soldaki (FROM'dan sonra yazılan) tabloda bulunan tüm kayıtları getirir.
✅ Çalışma Prensibi: Sağdaki tabloda eşleşen kayıt varsa bu bilgiler de eklenir. Ancak sağ tabloda karşılığı yoksa, sol tablodaki kayıt yine listelenir ve sağ tabloya ait alanlar NULL olarak gösterilir. Bu, sol tablodaki tüm verileri korurken, sağ tablodan ilgili bilgileri getirmek istediğimiz durumlarda kullanışlıdır.
💡 Örnek Senaryo: Bölümü olmayan bir öğretmenin bile listelenmesini sağlamak için tblOgretmen tablosu solda, tblBolum tablosu sağda olacak şekilde LEFT JOIN kullanılır.
1️⃣ Örnek Veri Ekleme: BölümID'si olmayan bir öğretmen ekleyelim:
INSERT INTO tblOgretmen (Ad, Soyad, Mail, Tel, BolumID)
VALUES ('Ali', 'Aksoy', 'ali.aksoy@uni.edu', '5550005555', NULL);
2️⃣ Örnek Veri Ekleme: Hocası olmayan bir bölüm ekleyelim:
INSERT INTO tblBolum (BolumAd)
VALUES ('Uzay Bilimleri');
3️⃣ INNER JOIN ile Karşılaştırma: Ali Aksoy'un BolumID'si NULL olduğu için INNER JOIN sonucunda listelenmeyecektir. Uzay Bilimleri bölümünün de öğretmeni olmadığı için listelenmeyecektir.
SELECT O.Ad, B.BolumAd
FROM tblOgretmen AS O
INNER JOIN tblBolum AS B ON O.BolumID = B.BolumID;
4️⃣ LEFT JOIN Uygulaması: tblOgretmen tablosundaki (sol tablo) tüm öğretmenler listelenir. Bölümü olmayan Ali Aksoy'un karşısındaki BolumAd alanı NULL olarak görünür.
SELECT O.Ad, B.BolumAd
FROM tblOgretmen AS O
LEFT JOIN tblBolum AS B ON O.BolumID = B.BolumID;
5️⃣ NULL Değerleri Metne Dönüştürme: ISNULL fonksiyonu ile NULL değerlerin yerine anlamlı bir metin gösterebiliriz.
SELECT O.Ad, ISNULL(B.BolumAd, 'Atama Bekliyor') AS Durum
FROM tblOgretmen AS O
LEFT JOIN tblBolum AS B ON O.BolumID = B.BolumID;
3. RIGHT JOIN (Sağ Birleştirme)
📚 Tanım: RIGHT JOIN, sağdaki tabloda bulunan tüm kayıtları getirir.
✅ Çalışma Prensibi: Soldaki tabloda eşleşen kayıt varsa bu bilgiler de eklenir. Ancak soldaki tabloda karşılığı yoksa, sağ tablodaki kayıt yine listelenir ve sol tabloya ait alanlar NULL olarak gösterilir. Bu, sağ tablodaki tüm verileri korumak istediğimiz senaryolarda tercih edilir.
💡 Örnek Senaryo: Öğretmeni olmayan bölümlerin bile listelenmesini sağlamak için tblBolum tablosu sağda, tblOgretmen tablosu solda olacak şekilde RIGHT JOIN kullanılır.
SELECT O.Ad, B.BolumAd
FROM tblOgretmen AS O
RIGHT JOIN tblBolum AS B ON O.BolumID = B.BolumID;
Yukarıdaki sorgu sonucunda, "Uzay Bilimleri" bölümü listelenecek ancak karşısındaki Ad alanı NULL olacaktır, çünkü bu bölümün henüz bir öğretmeni yoktur.
4. FULL JOIN (Tam Birleştirme)
📚 Tanım: FULL JOIN, hem soldaki hem de sağdaki tüm kayıtları getirir.
✅ Çalışma Prensibi: Eşleşen kayıtlar yan yana gösterilirken, eşleşme olmayan durumlarda eksik tarafa NULL değeri atanır. Bu, her iki tablodaki tüm verileri, eşleşme durumlarına bakılmaksızın tek bir sonuç kümesinde görmek istediğimizde kullanılır.
💡 Örnek Senaryo: Tüm öğretmenleri (bölümü olmasa bile) ve tüm bölümleri (öğretmeni olmasa bile) tek bir listede göstermek için FULL JOIN kullanılır.
SELECT O.Ad, B.BolumAd
FROM tblOgretmen AS O
FULL JOIN tblBolum AS B ON O.BolumID = B.BolumID;
Bu sorgu sonucunda, bölümü olmayan Ali Aksoy ve öğretmeni olmayan Uzay Bilimleri bölümü de listelenecektir. Eşleşmeyen taraflar NULL olarak görünecektir.
Uygulama Soruları 📝
Aşağıdaki senaryolar için uygun SQL sorgularını yazınız:
- Öğrencilerin adını, soyadını ve kayıtlı oldukları bölümün adını listeleyin.
- Tüm öğretmenleri ve bağlı oldukları bölümleri listeleyin. Bölümü olmayan öğretmenler de görünsün.
- Tüm bölümleri ve o bölümde çalışan öğretmenleri listeleyin. Öğretmeni olmayan bölümler de görünsün.
- Sınava girilmiş derslerin adını ve vize notlarını listeleyin.
- Tüm öğrencileri ve varsa/yoksa vize notlarını listeleyin.
- Tüm bölümleri listeleyin; eğer bölümde öğrenci yoksa öğrenci adı kısmı boş (NULL) kalsın.
- Öğretmenleri ve bölümleri aynı listede gösterin. Eşleşmeyen kayıtlar da listede olsun.
Sonuç
Veritabanı birleştirmeleri, ilişkisel veritabanı yönetim sistemlerinde farklı tablolardan anlamlı ve kapsamlı veri setleri oluşturmak için vazgeçilmez araçlardır.
- INNER JOIN yalnızca eşleşen kayıtları getirerek kesişim kümesini sunar.
- LEFT JOIN, sol tablonun tüm kayıtlarını koruyarak sağ tablodan eşleşen verileri ekler.
- RIGHT JOIN, sağ tablonun tüm kayıtlarını korur.
- FULL JOIN ise her iki tablonun tüm kayıtlarını birleştirerek eksik eşleşmeler için
NULLdeğerler atar.
Bu birleştirme türleri, karmaşık veri sorgulama ihtiyaçlarına esnek ve güçlü çözümler sunarak veritabanı kullanıcılarının verileri daha etkin bir şekilde analiz etmelerini ve raporlamalarını sağlar. Öğrencilerin bölüm bilgilerini listelemek, öğretmenlerin bağlı olduğu bölümleri görmek veya derslerin vize notlarını birleştirmek gibi çeşitli pratik uygulamalarda yaygın olarak kullanılırlar.








