30 Aralık 2016 Yazarı yhackup 0

MySQL Join Kullanımları

İnner Join

İnner Join birden fazla tablolardaki verileri eşleştirerek tek sorguda ver çekmek için kullanılır,
Database’de bir veriyi her tabloda tekrarlamak yerine genelde her tabloyu birbirine id’ler ile bağlarız.

 

Bu işlem şuna benzer, Tüm Ekmeğin arasına tüm domates ve tüm salatalık koyup yemek gibi.. halbuki tüm bu malzemeleri 4’e bölüp acıktıkça yesek daha iyi olmaz mı ?
Delphi de de aslında işlemlerimiz böyle bir unite tüm kodları yazmak yerine, daha sağlıklı kodlama için işlemlerimizi procedure’lere function’lara ünitlere ayırırız tümünü birden değil de gerektikçe çağırırırız…

 

Örneğin bir musteri tablomuz var, bir de islem tablomuz, müşteri üzerinden yapılan her işlemi, islem tablosunda tutuyoruz.  Bir islem raporu almamız gerektiğinde bu raporda musteri bilgileri ni de görmek ister isek ki isteriz, ya her islem kaydında müşteri bilgilerini de islem tablosuna yazacağız ismi, tc’si,vs.. ki fazladan fiedl ekleyeceğiz, database gereksiz şişmesi beraberinde gelecek. veya islem tablosuna sadece müsteri id sini kaydedeceğiz.

 

Örneklerle daha anlaşılır olur herhalde, kullandığımız canlı tablolardan bir örnek ile gidelim…

iki tablomuz var birinde illeri, diğerinde ilçeleri tutuyoruz ortak noktamız plaka kodları,

 

SELECT 
 il.kod AS plaka,
 il.ad AS `İL`,
 ilce.ad AS `İLCE`
FROM
 il
 INNER JOIN ilce ON (il.kod = ilce.kod)

 

Left Join

İnner Joinde birden fazla tablolardaki verileri eşleştirerek tek sorguda ver çekiyorduk, inner join kullanımında her iki tablodan iki parametreyi eşleştirerek aldığımızda, eğer ikinci tabloda ayni id’den eşleştirilebilecek bir veri var ise getiriyordu. yok ise sorgu cevabında o kayıt hiç gözükmüyordu.

Left Joinde ise ilk tablomuzda veri var ama ikinci veya üçüncü tablomuzda eşleşecek veri yok ise ,fakat yinede sorgularda gözükmesini istiyor isek kullanılır. Alttaki örnek daha açıklayıcı olacaktır.

iki tablomuz var birinde illeri, diğerinde ilçeleri tutuyoruz ortak noktamız plaka kodları,

SELECT
 il.kod AS plaka,
 il.ad AS `İL`,
 ilce.ad AS `İLCE`
FROM
 il
 INNER JOIN ilce ON (il.kod = ilce.kod)

INNER JOIN kullandığımda, YOZGAT’ın plakası ile eşleşen ilce tablosunda bir kayıt bulunmadığı için hiç gösterilmedi.

 

SELECT
 il.kod AS plaka,
 il.ad AS `İL`,
 ilce.ad AS `İLCE`
FROM
 il
 LEFT JOIN ilce ON (il.kod = ilce.kod)

LEFT JOIN kullandığımda, YOZGAT’ın plakası ile eşleşen ilce tablosunda bir kayıt bulunmamasına rağmen ilimiz sorguda geldi ama değer Null

Eğer sadece ikinci tablomuzda eşleşecek verisi olmayan illeri listelemek ise amacımız imdadımıza is NULL yetişiyor.

Right Join

Left Joinin tam tersi,
Left Joinde, ilk tablomuz (il) olan il’de var olup, ikinci tablomuzda eşleşen (ilce) olmasa da illerimizi dökebiliyorduk,
Right Joinde ise il’i olmayan ilçeleri de listeleyebiliyoruz. ilk tablomuzda bir eşleşecek karşılığı olmayan, ikinci tablomuzdaki kayıtları da dökebilmemize olanak sağlıyoruz.

Örnek; Kullanımı Üstteki kodumuzun aynısı LEFT’i silip RIGHT yazdık ve sonuç.

SELECT
il.kod AS plaka,
il.ad AS `İL`,
ilce.ad AS `İLCE`
FROM
il
RIGHT JOIN ilce ON (il.kod = ilce.kod)

E358dD.png

Eğer sadece ilk tablomuzda eşleşecek verisi olmayan ilçeleri listelemek ise amacımız imdadımıza yine is NULL yetişiyor.
Kullanımı,

SELECT
 il.kod AS plaka,
il.ad AS `İL`,
ilce.ad AS `İLCE`
FROM
il
RIGHT JOIN ilce ON (il.kod = ilce.kod)
WHERE il.kod is NULL

Sonuç,

qEPMrD.png