13 Ekim 2013, 18:17 | #1 | |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | 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ı | |
|
Etiketler |
join, mysql |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| |
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 |