PHP'de mysqli ile veritabanı işlemleri yaparken JOIN kullanımı, birden fazla tabloyu birbirine bağlayarak ilişkilendirilmiş verileri tek bir sorguda çekmene olanak tanır. Bu, ilişkisel veritabanı yapısının temel avantajlarından biridir.
JOIN NEDİR NE İŞE YARAR?
JOIN, SQL'de birden fazla tabloyu ilişkili alanlar üzerinden birleştirmek için kullanılır. Genellikle birbiriyle foreign key - primary key ilişkisi olan tablolarda kullanılır.
Örneğin:
-
kullanicilar tablosunda kullanıcı bilgileri,
-
siparisler tablosunda sipariş bilgileri varsa,
-
Her siparişin hangi kullanıcıya ait olduğunu görmek için bu iki tabloyu JOIN ile birleştirebiliriz.
JOIN TÜRLERİ
JOIN 4 farklı şekilde kullanılabilir.
INNER JOIN : Eşleşen kayıtları getirir. Her iki tabloda eşleşme varsa.
LEFTJOIN : Sol (ilk) tablodaki tüm kayıtları, sağdan eşleşenlerle birlikte getirir.
RIGHT JOIN : Sağ tablodaki tüm kayıtları, soldan eşleşenlerle birlikte getirir.
FULL OUTER JOIN : (MySQL desteklemez) Tüm kayıtları getirir, eşleşme olmasa bile.
JOIN KULLANIM ÖRNEĞİ
Kulanıcılar ve siparişler tablomuz aşağıdaki gibi olsun. Sipariş tablosunda kullanıcı bilgilerini yazmak yerine sadece ID bilgisini kaydederek, sipariş ile beraber kullanıcı bilgilerine de ulaşabiliriz.
KULLANICILAR TABLOSU (kullanicilar.sql)
| id |
ad |
soyad |
| 1 |
Franz |
KAFKA |
| 2 |
Sabahattin |
ALİ |
SİPARİŞLER TABLOSU (siparisler.sql)
| id |
kullanici_id |
urun |
| 1 |
1 |
televizyon |
| 2 |
1 |
yazıcı |
| 3 |
2 |
telefon |
Yukarıdaki tablolara göre , sipariş bilgilerini ,kullanıcı ismi dahil aşağıdaki gibi JOIN kullanarak TEK SORGU ile alabilriiz. Veri tabanı adının ticaret olduğunu varsayalım.
VERİ TABANI BAĞLANTISI
<?php
$baglanti = new mysqli("localhost", "root", "", "ticaret");
if ($baglanti->connect_error) {
die("Bağlantı hatası: " . $baglanti->connect_error);
}
?>
JOIN İLE TABLOLARI BİRLEŞTİREN SQL CÜMLESİ
<?php
$sql = "
SELECT kullanicilar.ad, siparisler.urun
FROM kullanicilar
INNER JOIN siparisler ON kullanicilar.id = siparisler.kullanici_id
";
$kayitlar=mysqli_query($baglanti,$sql);
?>
Yukarıdaki sql cümlesine göre, kullanıcılar tablosundan "ad" bilgisi ile siparişler tablosundan "urun" bilgisi alınıyor. INNER JOIN ile kullanıcı tablosundaki "id" bilgisi ile siparişler tablosundaki "kullanici_id" bilgisi eşleşiyorsa kayıtlar çekiliyor. Dolayısıyla 2 cümle yerine tek bir sql cümlesi ile seçim yapılmış olur.
VERİLERİ YAZDIRMA
JOIN ile alınan bilgileri klasik yazdırma komutları ile yazdıralım.
<?php
$kayitlar=mysqli_query($baglanti,$sql);
while($kayit=mysqli_fetch_assoc($kayitlar)) {
echo $kayit["ad"]." ".$kayit["urun"]."<br>";
}
?>
Yukarıda siparişler ve kullanıcı tablosundaki JOIN ile uyuşan veriler sanki tek bir tabloymuş gibi satır satır $kait değişkenine alınır ve ekran çıktısı aşağıdaki gibi olur.
Franz televizyon
Franz yazici
Sabahattin telefon
INNER JOIN ve LEFT JOIN Farkı
Veritabanlarında birden fazla tabloyu birleştirirken, INNER JOIN ve LEFT JOIN en çok kullanılan iki yöntemdir. Aralarındaki farkı bilmek, doğru sorguyu seçmek için kritik öneme sahiptir.
1. INNER JOIN
Örnek:
Müşteriler: Ali, Ayşe, Mehmet
Siparişler: Ali ve Ayşe sipariş vermiş
| INNER JOIN Sonucu |
| Ali |
|
Ayşe
|
2. LEFT JOIN
Örnek:
Müşteriler: Ali, Ayşe, Mehmet
Siparişler: Ali ve Ayşe sipariş vermiş
| LEFT JOIN Sonucu |
| Ali |
| Ayşe |
| Mehmet (NULL) |
3. NEDEN JOIN KULLANMALIYIZ?
-
JOIN kullanmazsan, tabloları ayrı ayrı sorgulayıp PHP’de birleştirmen gerekir.
-
Bu yöntem çok fazla sorgu üretir (N+1 problem), kod uzun ve yavaş olur.
- JOIN ile tek sorguda tüm ilişkili veriyi çekebilir, kodu basitleştirir ve performansı artırırsınız.
Özetle:
- INNER JOIN → sadece eşleşen veriler
- LEFT JOIN → sol tablodaki tüm veriler + eşleşenler, eşleşmeyenler NULL
- JOIN kullanmak performans ve kod okunabilirliği açısından kritiktir.