•         

            

            

  • HyperFilter | DoS Protection | DDoS Protection | DoS Mitigation | DDoS Mitigation | AntiDoS | AntiDDoS | Proxy Shielding

Veritabanı Üzerinde Join ile Tablo Birleştirme

Katılım
11 Ocak 2012
Mesajlar
12,856
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.

j_tablo.jpg



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



j_makale.jpg



Yorum Tablosu Örnek verileri



j_yorum.JPG





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

j_ljoin.JPG





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

j_rjoin.JPG





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.





mysql_join.jpg


 
Geri
Üst