20 Haziran 2009 Cumartesi

Joining İşlemi

Veritabanları ile ilgili olarak en gıcık işlem Joining (birleştirme) işlemidir. Mulakat ta yeni bitme bir proje yöneticisi size kaç tür Join var diye sorması muhtemeldir.
Bana sorarsınız kodlamanız iyiyse join falan hikaye Ben hep şöyle yapıyorum ; Diyelim ki bir forum uygulaması yapacaksınız (kategoriler-konular -mesajlar isimli 3 adet tablo yapmamanız imkansız herhalde)şimdi en üste kategoriler var ve bunun Primary Key ile isimlendirdiniz. KATID olsun. Şimdi Kategorilerin altında Konular var bununda yine Primary Key'i KONID olsun.Aynı zamanda hangi kategorinin konusu olduğunada karar vermek için KATID isimli bir INT tipinde sutun koyuyorum.Mesajlarda konunu alt tablosu olduğuna göre Mesajlarda da bu mantıkla yaklaşırsak yine MESID isimli primary key sonrada KATID ,KONID isimli INT tipinde sutunlar hazırlıyorsunuz.
ilişki falan kurmayı unutun ciddiyim ne yapacaz dikkat !
diyelimki kategorilerden birine tıkladınız.KATID alırsınız. Konular Tablonuza bir SELECT çekersiniz Konu.KATID=Kategori.KATID kıyaslarsınız alın size o kategorinin konuları .Aynı mantığı mesajlar içinde yapabilirsiniz. Ne ilişki ne Join Ne bilmem ne Salla gitsin. NEYSE bu söylediklerimiz yasak aman performans falan düşer facebook'unuz yada Google uygulamanız yavaş çalışır. :)

Kırmızı yazdığımız yerleri göz ardı ederek şimdi Join işlemine bakalım.
Bazen iki tablodaki bilgilere ihtiyaç duyarız.Hatta belkide daha fazlasına işte bu gibi durumlarda tablolardaki kıskaçlardan(foreig keyler ve primary keyler) tutarak birbirine bağlar. Ve select ile çekeriz.
Eğer bağlamadan iki tabloya SELECT verirsek bunların tabloların kartezyen çarpımlarını verir.
Örneğin Parça tablo 100 Müşteri tablosunda 50 kayıt olsun toplam 5000 kayıt döndürecektir.Bu örnekte ki gibi SELECT * FROM Parca,Musteri

Klasik Join İşlemi
SELECT tablo1.alan1 tablo2.alan1 FROM tablo1,tablo2 WHERE tablo1.birincianahtar= tablo2.yabancıanahtar [and diğer şartlar]

şeklinde bağlam gerçekleştirilebilir.

Self Join İşlemi (Tabloyu Kendisiyle İlişkilendirme)
Aynı tabloya iki farlı takma ad atayıp (alias) farklı tablolarmış gibi sorgulamalar yapılabilir.
Genelde pek kullanılmaz ama kontrol amaçlı işlemlerde sık sık kullanılabilir. Mesela parça listesinde aynı ürün isimleri karıştırıldığı için isimleri farklı olarak girilmiş olabilir bu nedenle barkod numarasına bakarak kontrol yapabiliriz.
SELECT T1.barkodno,T1.Urunad,T2.barkodno,T2.Urunad AS Parca T1, ParcaT2 WHERE T1.barkodno=T2.barkodno AND T1.Urunad <> T2.Urunad; gibi gibi

Left[outher] Join İşlemi
birinci tablodaki tüm veriler getirilir yanına eğer ikinci tabloda ilişkiye göre veri varsa getirilir.
SELECT Uye.Adi ,Odunc.KitapNo FROM uye LEFT JOIN odunc ON Odunc.UyeID=Uye.UyeID;
Right Join İşlemi
Right[outher] Join İşlemi
ikinci tablodaki tüm veriler getirilir yanına eğer birinci tabloda ilişkiye göre veri varsa getirilir.
SELECT Uye.Adi ,Odunc.KitapNo FROM uye RIGHT JOIN odunc ON Odunc.UyeID=Uye.UyeID;
Inner Join İşlemi
En çok kullanılan tablo birleştirme yöntemidir.her iki tablodaki ortak verileri getirir.
SELECT Uye.Adi ,Odunc.KitapNo FROM uye INNER JOIN odunc ON Odunc.UyeID=Uye.UyeID;
Klasik join işlemi aynı şeydir fakat birleştirme tekniği farklıdır. iş olsun diye yapılmış işte !.

Böylece Kafa Karıştıran join işlemlerinide hal etmiş olduk.

Hiç yorum yok:

Yorum Gönder