#1  
Alt 05-30-2013, 03:41 AM
Burak - ait Kullanıcı Resmi (Avatar)
VİP Üye
 
Üyelik tarihi: May 2013
Mesajlar: 187
Tecrübe Puanı: 370
Burak is on a distinguished road
Standart Mysql Birleştirme(Join)

Merhaba arkadaşlar.

Hemen hemen hepimiz mysql temel komutları kullanabiliyoruz. Fakat mysql'in biraz ileri seviye komutları için internette pek fazla açıklayıcı kaynak yok. Bu nedenle bunun hakkında bir ders yazmaya karar verdim.

Eğer SELECT, UPDATE, DELETE, INSERT gibi temel mysql komutlarını bilmiyorsanız bu makalenin devamını okumayınız.

Öncelikle "Join" kelime anlamı olarak "birleştirmek" anlamına gelir. Sql dilinde de tıpkı kelime anlamı gibi

aralarında ilişki bulunan (flört eden) tabloları birleştirmeye (evlendirmeye) yarar



Evet arkadaşlar. Öncelikle "aralarında ilişki bulunan tablolar ne demek ?" diye bir soru sorarsınız diye düşünüyorum. ve hemen örnek vereyim buna.



İki tablomuz var.

birincisi "Bolumler" ve bolumler tablomuzun aşağıdaki gibi stunları var diyelim
id (türü INT ve AUTO ICREMENT (otomatik artar))
bolum_adi (VARCHAR(50) (50 karakterlik metin saklar))

şimdi buara kadar tamam.

ikinci tablomuz ise "Ogrenciler" ve bu ögrencilerimizin stunları şu şekilde
ogrenci_id (Türü INT AUTO ICREMENT (otomatik artar))
bolum_id (Türü INT (Burada Bolumler tablosunun "id" stunun değerlerini tutacağız))
ogrenci_adi (Türü VARCHAR[100] (100 karakterlik metin saklar))



Şimdi yukarda ne yaptık onu açıklayalım;

bolumler tablosun id stununa eşşiz bir değer olması lazımki bir bölümü diğerinden ayıran bir özellik olsun

diğer stun olan bolum_adi zaten bölümün adını tutuyor.



Ogrenciler tablosuna ise ogrenci_id adında eşşiz değer tutan bir stun koyduk. çünki iki öğrenci aynı isime sahip olsa bile aynı kişi değildir. bunu ayırmamız gerekli. yani hiç bir öğrencinin id değeri diğerinink ile aynı olamaz.

Öğrenciler tablosuna birde bolum_id stunu ekledik. Bu stunu neden ekledik ?

Çünki bu stunda bir öğrenci hangi bölüme ait ise o bölümün "id" numarasını kayıt edeceğizki aralarında ilişki olsun



Evet. şimdi ilk önce bolumler tablosuna iki tane veri girelim. Bu veriler "Bilgisayar" ve "Muhasebe" olsun "id" değeri otomatik artan olduğundan dolayı
Bilgisayar
Muhasebe


şeklinde olur (soldaki sayılar id değeri sağdaki yazılar ise bolum adları.)

şimdi buraya kadar anladınız umarım.





Şimdide öğrenciler tablosuna iki öğrenci ekleyelim. Birinci veri "Ali" ikinci veri ise "Fırat" olsun

ve "bolum_id" stununa ise ilk veri için 1 , ikinci veri için ise 2 yazalım ve veritabanına kaydedelim.



Ve verilerimiz şu anda tabloda şu halde
1 1 Ali
2 2 Fırat


En soldaki otomatik artan değer olan "ogrenci_id" ikincisi kendimiz el ile girdiğimiz "bolum_id" üçüncüsüde öğrencinin adının tutulduğu "ogrenci_adi" stununun değeri.



Şimdi "İki tablonun ilişkisi nerde ?" derseniz eğer Bolumler tablosunun "id" stunu ile Ogrenciler tablosunun "bolum_id" stunu ilişkili.



Şimdi ben istiyorumki veritabanındaki öğrencileri çekeyim ve listeleyeyim. Fakat her öğrencinin yanında hangi bölümde olduğuda yazsın.

Ozaman bu tabloları birleştirmeliyim. Ve hemen birleştirelim

SQL komutu şu şekilde olacaktır;



SELECT ogrenci_adi, bolum_adi FROM Ogrenciler INNER JOIN Bolumler ON Ogrenciler.bolum_id = Bolumler.id



Bu sorguyu phpmyadminden çalıştırın bakalım. Şöyle bir sonuç alacaksınız
Ali --- Bilgisayar
Fırat --- Muhasebe


peki biz bu kodu açıklayalım.



ilk başta normal SELECT yaptık. Ardından ortaya "INNER JOIN" koyduk. "INNER JOIN" burda kaynak görevi gördü. iki tabloyu birbirine kaynaştırdı.

ve ekledik "ON" yani dedikki. bu birbirine kaynayan tablo üzerindeki ortak alanlar şunlar

"Ogrenciler.bolum_id = Bolumler.id" bu ikisi birbirine eşit olan kayıtları birleştir dedik.



JOIN çeşitleri;

JOIN'ler 4 e ayrılır;
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN






"INNER JOIN"
iki tabloyada eşit adalet göstererek veri çeker. Yani şöyle.

eğerki bir bölümde hiç öğrenci yok ise o bölümü göstermez.

yada hiç bir bölümde olmayan bir öğrenci varsa onuda göstermez.



"LEFT JOIN" ilk tabloya kıyak geçer. ("FROM" dan sonra adı yazılan ilk tablo) Yani şöyle;

eğerki bir bölümde hiç öğrenci yok ise o bölümü yine gösterir.

fakat hiçbir bölüme ait olmayan bir öğrenci olduğunda onu göstermez.



"RIGHT JOIN" bu joın türü LEFT JOIN'in yaptığının tam tersini yapar. yani şöyle;

eğerki bir bölümde hiç öğrenci yok ise o bölüm görüntülenmez

fakat hiç bir bölüme ait olmayan bir öğrenci var ise görüntülenir. Bölümünün adıda "NULL" olarak döner. kebap, salata.

Kusura bakmayın. acıktımda "döner" diyince içim geçti birden



"FULL OUTER JOIN" bu join türü "INNER JOIN" den biraz farklıdır. yani şöyle;

eğerki bir bölüme hiç öğrenci yok ise o bölümü gösterir

eğerki bir öğrenci hiçbir bölüme ait değilse onuda gösterir.



Evet Arkadaşlar. INNER JOIN ile örnek yaptım. diğer JOIN türlerinide denemek isterseniz örneğimizdeki

"INNER JOIN" yazan yeri değiştirmeniz yeterlidir.
__________________
[WmOfisi.com a Katılmak İçin Lütfen TIKLAYIN...]
[WmOfisi.com a Katılmak İçin Lütfen TIKLAYIN...]
Alıntı ile Cevapla
Cevapla

Bookmarks

Etiketler
birleştirmejoin, mysql, mysql inner join, mysql join, mysql left join, mysql outer join, mysql right join

Seçenekler
Stil

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık


Forum Sosyal
Powered by vBulletin® Webster Edition
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1 ©2011, Crawlability, Inc.
- Forum

Tasarım : VampRens
Wmofisi.Com Her Hakkı Saklıdır

turk porno ankara escort antalya escort afyon escort elazig escort canakkale escort izmir escort konya escort gaziantep escort izmit escort