İlişkili Tablolar: SQL Join İşlemleri ile Veri Çekme

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Modern bir web uygulamasında veriler genellikle "ilişkisel" (relational) olarak saklanır. Örneğin, bir forumda üyeler xf_user tablosunda, attıkları mesajlar ise xf_post tablosunda durur. Bir kullanıcının adıyla birlikte yazdığı mesajları listelemek istediğimizde bu iki tabloyu "birleştirmemiz" gerekir.

1. En Çok Kullanılan Join Türleri​


JOIN işlemlerini anlamanın en kolay yolu Venn şemalarıdır. Hangi veriyi almak istediğinize göre doğru JOIN türünü seçmelisiniz.


  • [] INNER JOIN: Her iki tabloda da eşleşen kayıtları getirir.
    [] LEFT JOIN: Sol tablodaki tüm kayıtları ve sağ tabloda eşleşenleri getirir. Eşleşme yoksa sağ taraf "NULL" döner.
  • RIGHT JOIN: Sağ tablodaki tüm kayıtları ve sol tabloda eşleşenleri getirir.

2. INNER JOIN Kullanımı (Kesişim Kümesi)​


Sadece mesajı olan kullanıcıları görmek istiyorsanız INNER JOIN kullanırsınız. Mesajı olmayan kullanıcılar listede yer almaz.

SQL:
SELECT uyeler.kullanici_adi, mesajlar.mesaj_icerigi
FROM uyeler
INNER JOIN mesajlar ON uyeler.id = mesajlar.uye_id;

3. LEFT JOIN Kullanımı (Kapsayıcı Küme)​


Tüm kullanıcıları listelemek, eğer varsa mesajlarını da yanına yazmak istiyorsanız LEFT JOIN idealdir. Mesajı olmayan kullanıcıların mesaj kısmı boş (NULL) görünür.

PHP:
<?php
require_once 'Database.php';
$db = Database::getInstance()->getConnection();

// Kullanıcıları ve (varsa) son mesajlarını çekelim
$sql = "SELECT u.kullanici_adi, m.mesaj_icerigi
FROM uyeler u
LEFT JOIN mesajlar m ON u.id = m.uye_id
ORDER BY u.id ASC";

$sorgu = $db->query($sql);
$sonuclar = $sorgu->fetchAll();

foreach ($sonuclar as $satir) {
$mesaj = $satir['mesaj_icerigi'] ?? "Henüz mesaj yazmamış.";
echo "Üye: {$satir['kullanici_adi']} - Mesaj: $mesaj 

";
}
?>

JOIN Türleri Karşılaştırma Tablosu​


JOIN TürüMantıkSonuç Seti
INNER JOINEşleşen varsa getirSadece ortak olanlar
LEFT JOINSolu koru, sağdan eşleşenleri alSolun tamamı + Sağın eşleşenleri
RIGHT JOINSağı koru, soldan eşleşenleri alSağın tamamı + Solun eşleşenleri

4. Profesyonel İpuçları ve Performans​



  • [] Alias (Takma Ad) Kullanın: Tablo isimlerini uzun uzun yazmak yerine uyeler u gibi kısaltmalar kullanın. Kodunuz daha temiz görünür.
    [] İndeksleme: JOIN işleminde kullandığınız sütunların (genellikle ID sütunları) veritabanında "INDEX" olarak tanımlandığından emin olun. Aksi takdirde milyonlarca kayıtta sorgu dakikalar sürebilir.
  • Belirli Sütunları Seçin: SELECT * kullanmak yerine sadece ihtiyacınız olan sütunları (u.kullanici_adi, m.icerik) seçerek sunucu yükünü azaltın.

Sonuç​


İlişkili tablolarla çalışmak, veritabanı yönetiminin kalbidir. JOIN işlemlerini kavradığınızda, karmaşık raporlar oluşturabilir ve verilerinizi çok daha esnek bir şekilde yönetebilirsiniz. Unutmayın; doğru JOIN seçimi hem doğru veriyi getirir hem de sitenizin hızını korur.
 
Geri
Üst