SQL Server’da Join Tipleri
Herkese merhaba,
Bu yazıda SQL Server’da Join Tipleri hakkında bilgi vereceğim.
SQL Server’da Join yapıları en çok kullanılan yapılardır.
İlk olarak Join nedir ona değinelim. Join, birden fazla tabloyu birbirine tablolardaki eş kolonlar aracılığıyla eşitleyerek bağlama işlemidir. Kullandığımız Join çeşidine göre gelen sonuç kümesi değişir.
Aşağıda gördüğünüz görsel Join işlemi hafızanızda bir şeyler oluşturacaktır.
Join işlemi görüldüğü üzere Matematikte görmüş olduğunuz kümeler konusu gibidir. Aslında bir bakımdan da öyledir. İki dataya ait kesişim, birleşim, fark vs gibi çeşitli işlemleri Join yapılarını kullanarak çözeriz.
Aşağıda yazdığım liste çok kullanılan Join yapılarıdır.
1-) JOIN ya da INNER JOIN (İkisi de aynı şeydir)
2-) LEFT JOIN ya da LEFT OUTER JOIN (İkisi de aynı şeydir)
3-) RIGHT JOIN ya da RIGHT OUTER JOIN (İkisi de aynı şeydir)
4-) FULL JOIN ya da FULL OUTER JOIN (İkisi de aynı şeydir)
5-) CROSS JOIN
Yukarıdaki Join yapılarını anlamak için aşağıdaki tabloları oluşturup içlerine verileri ekleyelim.
--Tabloların oluşturulması
CREATE TABLE Sehirler
(
ID INT,
SehirIsmi VARCHAR(100)
);
CREATE TABLE Yiyecekler
(
ID INT,
SehirID INT,
YiyecekAdi VARCHAR(100)
);
--Verilerin tabloya eklenmesi
INSERT INTO Sehirler
(
ID,
SehirIsmi
)
VALUES
(1, 'Adana');
INSERT INTO Sehirler
(
ID,
SehirIsmi
)
VALUES
(42, 'Konya');
INSERT INTO Sehirler
(
ID,
SehirIsmi
)
VALUES
(3, 'Afyon');
INSERT INTO Sehirler
(
ID,
SehirIsmi
)
VALUES
(2, 'Adıyaman');
INSERT INTO Sehirler
(
ID,
SehirIsmi
)
VALUES
(16, 'Bursa');
INSERT INTO Yiyecekler
(
ID,
SehirID,
YiyecekAdi
)
VALUES
(1, 1, 'Adana Kebap');
INSERT INTO Yiyecekler
(
ID,
SehirID,
YiyecekAdi
)
VALUES
(2, 42, 'Etli Ekmek');
INSERT INTO Yiyecekler
(
ID,
SehirID,
YiyecekAdi
)
VALUES
(3, 3, 'Kaymak');
INSERT INTO Yiyecekler
(
ID,
SehirID,
YiyecekAdi
)
VALUES
(4, 2, 'Çiğ Köfte');
INSERT INTO Yiyecekler
(
ID,
SehirID,
YiyecekAdi
)
VALUES
(5, 75, 'Ayran Aşı');
JOIN ya da INNER JOIN: Kısacak iki tablodaki ortak kayıtları getirir. Sehirler tablosundaki ID kolonu ile Yiyecekler tablosundaki SehirID kolonu eşit olan kayıtları getir diyerek hangi yiyeceğin hangi şehre ait olduğunu gösteren bir sonuç elde edelim.
SELECT SehirIsmi,
YiyecekAdi
FROM dbo.Sehirler
INNER JOIN dbo.Yiyecekler
ON Yiyecekler.SehirID = Sehirler.ID;
Görüldüğü üzere Bursa’ya ait herhangi bir veri gelmedi çünkü karşılığında herhangi bir yiyecek ismi yok. INNER JOIN ortak OLAN verileri getirir.
LEFT JOIN ya da LEFT OUTER JOIN: İlk tablodaki kayıtlar tamamen listelenir. Eğer ilk tablodaki kaydın karşılığı ikinci tabloda yoksa ikinci tablodaki değeri NULL olarak döner.
SELECT SehirIsmi,
YiyecekAdi
FROM dbo.Sehirler
LEFT JOIN dbo.Yiyecekler
ON Yiyecekler.SehirID = Sehirler.ID;
Görüldüğü üzere Bursa’ya ait veri geldi ama Bursa’nın karşılığı olan yiyecek ismi dediğimiz gibi NULL olarak gözüktü çünkü karşılığında herhangi bir yiyecek ismi yok.
RIGHT JOIN ya da RIGHT OUTER JOIN: İkinci tablodaki kayıtlar tamamen listelenir. Eğer ikinci tablodaki kaydın karşılığı ilk tabloda yoksa ilk tablodaki değer NULL olarak döner. Kısaca LEFT JOIN’in tam tersidir diyebiliriz.
SELECT SehirIsmi,
YiyecekAdi
FROM dbo.Sehirler
RIGHT JOIN dbo.Yiyecekler
ON Yiyecekler.SehirID = Sehirler.ID;
Görüldüğü üzere Ayran Aşı’na ait veri geldi ama Ayran Aşı’nın karşılığı olan şehir ismi dediğimiz gibi NULL olarak gözüktü çünkü karşılığında herhangi bir şehir ismi yok.
FULL JOIN ya da FULL OUTER JOIN: LEFT OUTER ve RIGHT OUTER JOIN’in birleştirilmiş hali gibidir. İki tablodaki tüm kayıtlar da döner. Fakat karşılığı olmayan kolonlar NULL olarak döner.
SELECT SehirIsmi,
YiyecekAdi
FROM dbo.Sehirler
FULL JOIN dbo.Yiyecekler
ON Yiyecekler.SehirID = Sehirler.ID;
Görüldüğü üzere her iki tabloya ait tüm veriler geldi. Karşılıkları olmayan alanlar NULL olarak geldi.
CROSS JOIN: Tabloların kartezyen çarpımını verir. Yani soldaki tablodaki her satıra karşılık olarak sağdaki tablonun tüm satırlarını döndürür.
SELECT SehirIsmi,
YiyecekAdi
FROM dbo.Sehirler
CROSS JOIN dbo.Yiyecekler
Eğer CROSS JOIN’in WHERE koşuluna INNER JOIN’deki ON ifadesine yazdığımız gibi eşitleme işlemi yaparsak INNER JOIN’deki gibi çalışacaktır ve aynı sonucu döndürecektir.
SELECT SehirIsmi,
YiyecekAdi
FROM dbo.Sehirler
CROSS JOIN dbo.Yiyecekler
WHERE Yiyecekler.SehirID = Sehirler.ID;
Görüldüğü üzere SQL Server’da Join tiplerini görmüş olduk.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.