IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 13 Ekim 2013, 18:17   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Mysql 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 smiley

Eğerki iki tabloyu birleştirirseniz sevaba girmiş bulunursunuz. Bundan dolayıda bir programcıysanız cennetliksiniz demektir. "Ve beyin koşarak uzaklaşır..."

Öhhü öhhü. kendime bir çeki düzen veriyorum ve ciddileşiyorum Gülmeyin bakın bende gülmüyorum. smiley

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.smiley

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



"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.

Alıntı

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
join, mysql


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

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 Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
tuning-primer.sh mysql tuning scripti - mysql performans raporu CeSaRCripS MySQL 0 16 Aralık 2012 15:11
Multi join | Mass Clone Join Kuruması.. CoCoRiCo mIRC Scripting Hazır Kodlar 4 12 Aralık 2005 08:29