
veritabanı ile işlemler yaparken çoğu zaman herhangi bir kaydın bilgisi 2 yada daha fazla tabloda tutulur.
buna örnek olarak;
kişi bilgileri bir tabloda, kişinin kayıtlı olduğu kurslar başka bir tabloda tutulabilir. bu durumda öncelikle kişinin bilgilerini çekmek için kullanici tablosu üzerinde select sorgusu, daha sonra bu kişinin kurs bilgisini almak için ise kullanici tablosundan listelenen veriye göre kurs tablosunda yeni bir select sorgusu yapılır.
Peki neden bilgileri tek tabloda tutmuyoruz? Diyelim ki php kursuna 100 kişi kayıtlı. Kurs adını her kullanıcının yanına ayrı ayrı yazarsak hem gereksiz yer kaplar hem de kursun adını değiştirmek istediğimizde 100 kaydı tek tek güncellememiz gerekir. Bunun yerine kursları ayrı bir tabloda tutup kullanıcı tablosunda sadece kursun id değerini (kurs_id) tutuyoruz.
bu durumda genel olarak çift sorgu olur ve aynı zamanda başka sorunları da beraberinde getirir. Mesela 100 kullanıcınız varsa 1 sorgu kullanıcılar için, 100 sorgu da her kullanıcının kursu için olmak üzere toplam 101 sorgu çalışır. Bu da sayfanızın yavaşlaması demek.
bu yazdığımızı örneklendirecek olursak,
kullanıcı tablosu

Kurs Tablosu

<?php
$sorgu = $pdo->query("select * from kullanici");
$kullanicilar = $sorgu->fetchAll(PDO::FETCH_OBJ);
foreach ($kullanicilar as $kullanici) {
echo "Kullanıcı Adı :: ". $kullanici->ad ."<br>";
$sorgu2 = $pdo->query("select * from kurs where id = '$kullanici->kurs_id' ");
$kurs = $sorgu2->fetch(PDO::FETCH_LAZY);
echo "Kurs Adı :: ". $kurs->kurs_ad ."<br>";
}
/*
çıktısı
Kullanıcı Adı :: Mustafa Yılmaz
Kurs Adı :: php
...
...
...
*/
üstteki yazmış olduğumuz iki adet sql sorgusu yerine tabloları birleştiren join ifadesini kullanmamız daha kolay olacaktır. Aynı işi join ile tek sorguda şu şekilde yapabiliriz.
select * from kullanici join kurs on kullanici.kurs_id=kurs.id
Burada on ifadesinden sonra yazdığımız kısım iki tablonun hangi alanlar üzerinden birbirine bağlanacağını belirtir. Bizim örneğimizde kullanici tablosundaki kurs_id alanı ile kurs tablosundaki id alanı eşleşiyor.
Join türleri temelde 3 tanedir. Yazının başındaki şekillerde de gördüğünüz gibi her biri iki tablodan farklı kayıtları getirir.
- inner join : sadece iki tabloda da eşleşen kayıtları getirir.
- left join : soldaki tablonun tüm kayıtlarını, sağdaki tablonun ise eşleşen kayıtlarını getirir.
- right join : sağdaki tablonun tüm kayıtlarını, soldaki tablonun ise eşleşen kayıtlarını getirir.
Join Türleri İçin
Henüz Yorum Yapılmamış. İlk Yorumu Siz Yapın!