Veritabanında tablolarımızda tuttuğumuz verilere göre farkı yapılar oluşturmamız gerekebilir. Özellikle veritabanında veri tekrarını önlemek için veriler birden fazla tablo üzerine dağıtılır. Bu tablolar arasında ilişkilendirme primary key (Birincil anahtar) ve Foreign key (yabancı anahtar) ler yardımıyla yapılır. İhtiyacımız olduğunda iki veya daha fazla ilişkili tabloları tek bir tablo şeklinde ortak bir payda da birleştirerek kullanabiliriz.
Yukarıda bahsettiğimiz gibi ilişkili tablolar arasında bağlantı kurarak verilere bir bütün şeklinde erişebilmemiz için join yapıları kullanılmaktadır. Joinler ile ilişkili tablolarımız üzerinde ihtiyacımıza göre select sorguları oluşturabiliriz.
Kullanabileceğimiz join yöntemleri;
-İnner Join
-Left Join
-Right Join
-Full Join
-Cross Join
Tek tek yukarıda belirttiğimiz join yapılarını inceleyelim. Join yapılarını incelerken kullanacağımız örnek tablo aşağıdaki gibidir.
Elimizde bir makale tablomuz ve birde makalelere gelen yorumları tuttuğumuz yorum tablomuz var. Hangi yorumun hangi makaleye ait olduğunu tespit etmek için yorumlar tablosunda makale_id değeri ile bir alan ekleyerek iki tablo arasında ilişki kurduk.
Sorguların nasıl işlem yaptığını görmek amacıyla da makale ve yorum tablosuna örnek veriler ekledik; Yorumlar tablosunda 1, 2 ve 3 numaralı makalelere ait kayıt bulunmaktadır.
Makale Tablosu Örnek verileri
Yorum Tablosu Örnek verileri
Inner Join :
Inner Join iki tablo arasındaki kesişimi almayı sağlayan birleştirme yöntemidir. Makale tablomuz ile yorum tablomuzu inner join ile birleştirdiğimizde, yorumu olmayan makaleler listelenmeyecektir
.Örnek sorgumuz;
SELECT
M.makale_id,M.makale_metin,Y.yorum_id,Y.yorum_metin
FROM
makale as M
INNER JOIN
yorum as Y
ON
M.makale_id = Y.makale_id
Left Join sorgumuzun çıktısı yukarıdaki gibidir. Yorumlar tablosunda 1, 2 ve 3 numaralı makalelere ait yorum kayıtları bulunmaktadır. 4 ve 5 numaralı makalelerin ise yorum tablosunda kaydı yoktur. Bu nedenle 4 ve 5 numaralı makalenin yorum değerleri null olarak getirilmiştir
.Right Join:
Right Join, ikinci tablodaki tüm kayıtların, birinci tabloda ise sadece ilişkili kayıtların görüntülenmesini sağlar. Eğer birinci tabloda ilişkili kayıt yoksa ikinci tablodaki kayıtlar getirilir, birinci tablodaki alan null olarak gösterilir.
Örnek Sorgumuz;
SELECT
M.makale_id,M.makale_metin,Y.yorum_id,Y.yorum_metin
FROM
makale as M
RIGHT JOIN
yorum as Y
ON
M.makale_id = Y.makale_id
Right join
sorgumuzun çıktısı yukarıdaki gibidir. 1, 2 ve 3 numaralı makaleleri ait yorum kaydı bulunmaktadır.Yorum tablosunda yorum_id değeri 10 olan ve 6. Makale için eklenmiş olan yorum kaydı bulunmaktadır. Fakat makale tablosunda makale_id değeri 6 olan makale yoktur.Bu nedenle herhangi bir eşleşme olmadığı için 6. Makale yorumu karşılığı null olarak gösterilmiştir.
Full join :
Full Join her iki tabloda da tüm kayıtların getirilmesini sağlar. Yalnız MySQL Full Join kullanımını desteklemez.
Cross Join:
MySQL üzerinde Cross Join, inner join ile aynı işlemi yapar.
Yukarıda bahsettiğimiz gibi ilişkili tablolar arasında bağlantı kurarak verilere bir bütün şeklinde erişebilmemiz için join yapıları kullanılmaktadır. Joinler ile ilişkili tablolarımız üzerinde ihtiyacımıza göre select sorguları oluşturabiliriz.
Kullanabileceğimiz join yöntemleri;
-İnner Join
-Left Join
-Right Join
-Full Join
-Cross Join
Tek tek yukarıda belirttiğimiz join yapılarını inceleyelim. Join yapılarını incelerken kullanacağımız örnek tablo aşağıdaki gibidir.
Elimizde bir makale tablomuz ve birde makalelere gelen yorumları tuttuğumuz yorum tablomuz var. Hangi yorumun hangi makaleye ait olduğunu tespit etmek için yorumlar tablosunda makale_id değeri ile bir alan ekleyerek iki tablo arasında ilişki kurduk.
Sorguların nasıl işlem yaptığını görmek amacıyla da makale ve yorum tablosuna örnek veriler ekledik; Yorumlar tablosunda 1, 2 ve 3 numaralı makalelere ait kayıt bulunmaktadır.
Makale Tablosu Örnek verileri
Yorum Tablosu Örnek verileri
Inner Join :
Inner Join iki tablo arasındaki kesişimi almayı sağlayan birleştirme yöntemidir. Makale tablomuz ile yorum tablomuzu inner join ile birleştirdiğimizde, yorumu olmayan makaleler listelenmeyecektir
.Örnek sorgumuz;
SELECT
M.makale_id,M.makale_metin,Y.yorum_id,Y.yorum_metin
FROM
makale as M
INNER JOIN
yorum as Y
ON
M.makale_id = Y.makale_id
Left Join sorgumuzun çıktısı yukarıdaki gibidir. Yorumlar tablosunda 1, 2 ve 3 numaralı makalelere ait yorum kayıtları bulunmaktadır. 4 ve 5 numaralı makalelerin ise yorum tablosunda kaydı yoktur. Bu nedenle 4 ve 5 numaralı makalenin yorum değerleri null olarak getirilmiştir
.Right Join:
Right Join, ikinci tablodaki tüm kayıtların, birinci tabloda ise sadece ilişkili kayıtların görüntülenmesini sağlar. Eğer birinci tabloda ilişkili kayıt yoksa ikinci tablodaki kayıtlar getirilir, birinci tablodaki alan null olarak gösterilir.
Örnek Sorgumuz;
SELECT
M.makale_id,M.makale_metin,Y.yorum_id,Y.yorum_metin
FROM
makale as M
RIGHT JOIN
yorum as Y
ON
M.makale_id = Y.makale_id
Right join
sorgumuzun çıktısı yukarıdaki gibidir. 1, 2 ve 3 numaralı makaleleri ait yorum kaydı bulunmaktadır.Yorum tablosunda yorum_id değeri 10 olan ve 6. Makale için eklenmiş olan yorum kaydı bulunmaktadır. Fakat makale tablosunda makale_id değeri 6 olan makale yoktur.Bu nedenle herhangi bir eşleşme olmadığı için 6. Makale yorumu karşılığı null olarak gösterilmiştir.
Full join :
Full Join her iki tabloda da tüm kayıtların getirilmesini sağlar. Yalnız MySQL Full Join kullanımını desteklemez.
Cross Join:
MySQL üzerinde Cross Join, inner join ile aynı işlemi yapar.