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

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   MySQL (https://www.ircforumlari.net/mysql/)
-   -   Mysql Join Uygulaması (https://www.ircforumlari.net/mysql/628782-mysql-join-uygulamasi.html)

hAte 16 Ekim 2014 15:16

Mysql Join Uygulaması
 
Veri tabanı işlemlerinde bir tablodan çalışabileceğimiz gibi birden çok tablolardan veriler çekmemiz ve bu verilere belli kriterler uygulamamız gerekebilir. Uygulamalarımızda her defasında bir veriyi çekip kontorol etmek ve buna istenen kriterleri uygulamak büyük kapsamlı projelerde karmaşıklığa ve kodların yavaş çalışmasına neden olabilir.

Örnek olarak kitap tablomuz ve seçilen kitapların yer aldığı galeri tablomuz olsun. Galeri tablomuzda kitabın id si ne göre işlemler yapacağız.
Kitap tablomuzda: id, isim ve kapak sütunları yer alsın.
Galeri tablomuzda ise, id, kitap_id sutunları yer alsın.

Şimdi seçilen yani galeri tablosunda yer alan verilere göre kitapları vitrin bölümümüzde gösteren kodları yazalım.
SELECT kitap.id as kid, kitap.isim, kitap.kapak, galeri.id as

gid, galeri.kitap_id FROM kitap, galeri WHERE kitap.id=galeri.kitap_id

Yukarıdaki kod satır ; "kitap.id as kid" ile kitap tablosundaki id sutununu kid olarak aldık,"kitap.isim" ile kitap tablosundaki isim sutununu almış olduk,"kitap.kapak" ile kitap tablosundaki kapak sutunundaki veriyi almış olduk(Kitap kapağının adının tutulmuş olduğu alan). Sıra galeri tablosundaki verileri almaya geldi. "galeri.id as gid" ile galeri tablosundaki id yi gid olarak almış olduk, "galeri.kitap_id" ile galeri tablosundaki kitap idlerinin tutulduğu bölümü çekmiş olduk. Daha sonra "WHERE kitap.id=galeri.kitap_id" ile kitap id si galeri tablosunda kitap_id sutununda yer alan yani galerimize eklenmiş olan verileri(kitapları) getir demiş olduk.
"as" kodu ile değişken tanımlamış oluyoruz.

Bu örnegimizi biraz daha geliştirerek satış içi olan ve galeride yer alan kitapları getirmek isteseydik.Satış içi olarak kitap tablomuzda durum sutununun yer aldığını farz edelim; ve durum=1 ise satış içi durum=0 ise satış dışı olsun kitabımız.
SELECT kitap.id as kid, kitap.isim, kitap.kapak, galeri.id as

gid, galeri.kitap_id FROM kitap, galeri WHERE kitap.id=galeri.kitap_id and kitap.durum=1

Yukarıdaki kod satırının en sonunda yer alan "and kitap.durum=1" kodu ile ve kitap tablosunda durum 'u 1 olan yani satış içi olan demiş olduk.

YazılımMimarı 18 Ekim 2014 01:35

Cevap: Mysql Join Uygulaması
 
Yapılan işlem genel tabirler JOIN fakat JOIN 4 ayrı şekilde uygulanır. Yukarıdaki örnek INNER JOIN örneğidir.

JOIN tipleri;

INNER JOIN, LEFT JOIN (LEFT OUTER), RIGHT JOIN (RIGHT OUTER), CROSS JOIN

INNER JOIN, her iki tabloyuda baştan aşağı tarar ve ortak satırları getirir. Burada en önemli sıkıntı şudur.

Örneğin ;

A tablonuzda 10 milyon kaydınız var.
B tablonuzdada 8 milyon kaydınız var.

INNER JOIN 18 milyon veriyi tarar ve ortak satırları size getirir. Performans olarak sucks yani!

Fakat LEFT JOIN kullanırsanız. O zaman sadece 8 milyonluk bir kayıt içinde arama yaparsınız ve ortak olan satırları yine size getirir.

Verdiğim örnekte ilk INNER JOIN'e göre %50 'den fazla performans gösterir.

Sevgilerle :)


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 05:58.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk