SQL Server’da Join Türleri

SQL Server Join

Merhabalar, bu yazımızda SQL Server üzerinde devamlı olarak kullandığımız joinleri inceleyeceğiz. Joinleri kullanma zorunluluğumuz yok, daha farklı yollardanda istediğimiz sorgulara ulaşabiliriz ama performans konusunda sıkıntılar yaşayabiliriz.

Benim devamlı olarak kullandığım bi görseli sizlere paylaşıcam. Tüm türleri kısa bir şekilde özetlemektedir. Sizin içinde çok faydalı olacaktır.

SQL Server Join Türleri

Görsel incelemesini yaptıktan sonra örneklemelerle konuya başlayabiliriz. Kategori ve Kitap adında 2 tablo oluşturuyoruz. Kitap ve Kategori tabloları arasında örneklerimizi gerçekleştireceğiz. Tabloları oluşturduktan sonra kayıtlarımızı ekliyoruz.


CREATE TABLE [dbo].[Kitaplar](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
	[KategoriID] [int] NULL,
 CONSTRAINT [PK_Kitaplar] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO



CREATE TABLE [dbo].[Kategori](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_Kategori] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO


INSERT INTO Kategori VALUES ('Macera')
INSERT INTO Kategori VALUES ('Bilim Kurgu')
INSERT INTO Kategori VALUES ('Aksiyon')
INSERT INTO Kategori VALUES ('Aşk')

INSERT INTO Kitaplar VALUES ('Ölümcül Şifre',1)
INSERT INTO Kitaplar VALUES ('Hacker',2)
INSERT INTO Kitaplar VALUES ('Ada',3)
INSERT INTO Kitaplar VALUES ('Sahipsiz',NULL)

Kullanda en temel ve en önemli şey iki tablonun birbirini tanımasıdır. Kategori ve Kitap tablolarında kategoriye ait ID alanlarını birbirine göstereceğiz. Yani kitap tablosunda kategoriıd 1, 1 e karşılık gelen kategoriyi bulmuş olucaz.

INNER JOIN

En çok kullanılan ve anlaşılması en basit türdür. İki tablodaki ortak kayıtları getirir. Örneğimizde kategorisi olan kitapları listelemektedir.


SELECT kitap.Name,k.Name FROM Kitaplar kitap INNER JOIN Kategori k
									ON kitap.KategoriID=k.Id

Kategorisi olmayan yada içinde kitap bulunmayan kategoriler listelenmemektedir.

Ölümcül SifreMacera
HackerBilim Kurgu
AdaAksiyon

LEFT JOIN

Adındanda anlaşılacağı gibi sol taraftaki tabloyu baz alır. Yani tüm kitapları getiricez kategorisi olmayan kitaplarda NULL yazılacaktır.


SELECT kitap.Name,k.Name FROM Kitaplar kitap LEFT JOIN Kategori k
									ON kitap.KategoriID=k.Id

Sonucumuz şu şekildedir.

Ölümcül SifreMacera
HackerBilim Kurgu
AdaAksiyon
SahipsizNULL

RIGHT JOIN

Adındanda anlaşılacağı gibi sağ taraftaki tabloyu baz alır. Yani tüm kategorileri getiricez, kitap olmayan kategorilerde NULL yazılacaktır.


SELECT kitap.Name,k.Name FROM Kitaplar kitap RIGHT JOIN Kategori k
									ON kitap.KategoriID=k.Id

Sonucumuz şu şekildedir.

Ölümcül SifreMacera
HackerBilim Kurgu
AdaAksiyon
NULLAşk

FULL JOIN

Herhangi bir tabloyu baz almaz. Tüm kitapları ve kategorileri getirir. Kategorisi olmayan kitabın kategorisine NULL değerini verir. Kitap bulunmayan kategorinin kitap bilgisine NULL değerini verir.


SELECT kitap.Name,k.Name FROM Kitaplar kitap FULL JOIN Kategori k
									ON kitap.KategoriID=k.Id

Sonucumuz şu şekildedir.

Ölümcül SifreMacera
HackerBilim Kurgu
AdaAksiyon
SahipsizNULL
NULLAşk

CROSS JOIN

2 tabloda herhangi eşleme yapmadan tüm satırları kartezten çarpımı yapmaktadır. 4 kitap ve 4 kategorimiz olduğu için 16 satır sonuç verecektir.


SELECT kitap.Name,k.Name FROM Kitaplar kitap CROSS JOIN Kategori k				

Karışıklıklar !

Joinler ile karıştırılan en büyük nokta isimlendirmeleridir. Left Join ile Left Outer Join aynı şeydir. Hiç bir faklılığı yoktur. Outer gördüğünüz yerde farklı birşey hissine kapılmayınız.

Diğer yazılarımızda görüşmek üzere.

Referans: https://docs.microsoft.com/en-us/sql/relational-databases/performance/joins?view=sql-server-ver15

E-bültene Abone Ol Merak etmeyin. Spam yapmayacağız.

Yazar

Kocaeli Üniversitesi Bilişim Sistemleri Mühendisliğini bitirip sektörde veri tabanı mühendisi olarak göreve başladım.

İlgili Yazılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Hızlı yorum için giriş yapın.

Başka Yazı Yok

Kayıt Ol

Zaten üye misiniz? Giriş Yap

Giriş Yap

Henüz üyeliğiniz yok mu? Kayıt Ol