M3 · SQL ile Veri Sorgulama
JOIN: Tabloları Birleştirme
Neden bu konu?
Gerçek veri asla tek tabloda durmaz: siparişler bir tabloda, müşteri bilgisi başka tabloda, ürünler üçüncü tabloda tutulur. 'En çok sipariş hangi şehirden geliyor?' sorusunun cevabı hiçbir tek tabloda yoktur — çünkü tutar siparis tablosunda, şehir ise musteri tablosunda. JOIN bu iki defteri ortak anahtarla bir araya getirir. Yanlış JOIN türü seçersen ya sessizce satır kaybedersin (INNER, eşleşmeyeni atar) ya da farkında olmadan satırları çoğaltırsın (unique olmayan anahtar). İkisi de raporundaki toplamı bozar ve kimse fark etmez — 'ciromuz neden %8 düştü' krizinin arkasında sık sık yanlış bir JOIN vardır.
Benzetme: kavramın günlük karşılığı
JOIN, iki ayrı defteri ortak bir sütundan hizalayıp üst üste koymaktır. Elinde bir 'sipariş defteri' (her satırda müşteri numarası var) ve bir 'müşteri defteri' (her satırda o numaranın şehri var) düşün. JOIN, sipariş defterindeki her müşteri numarasını müşteri defterinde bulur ve şehri getirip yan sütuna yapıştırır. Ortak sütun (musteri_id) iki defteri hizalayan cetveldir; o cetvel olmadan defterler birbirine bakamaz.
Bu işin sırrı: kalıplar
- Her JOIN üç parçadan oluşur: hangi iki tablo, hangi ortak anahtar (ON), hangi tür (INNER/LEFT). Kalıp: 'FROM sol JOIN sağ ON sol.anahtar = sağ.anahtar' — anahtarı yazmayı unutursan felaket (çapraz çarpım) olur.
- INNER JOIN = kesişim: yalnızca iki tabloda da eşleşen satırlar gelir. Anahtarı bir tarafta olmayan satır sessizce düşer. Örnek: musteri tablosunda olmayan bir musteri_id'li sipariş, INNER'da yok olur.
+ 3 kalıp daha tam derste
İlk uygulama adımı
1. İki illüstratif tabloyu kafanda kur
NovaCommerce'ten iki tablo yaz: siparis(siparis_id, musteri_id, tutar) ve musteri(musteri_id, sehir). siparis tablosuna 4 satır koy: (1, 100, 250), (2, 100, 90), (3, 101, 400), (4, 999, 60). musteri tablosuna 2 satır koy: (100, 'İzmir'), (101, 'Ankara'). Dikkat: 999 numaralı müşteri musteri tablosunda YOK.
Kontrol noktası: Elinde 4 siparişli ve 2 müşterili iki tablo var; musteri_id=999'un müşteri tablosunda karşılığı olmadığını fark ettin. Bu 'eşleşmeyen satır' testin olacak.
+ 4 adım daha tam derste
Dersin devamı erken erişimde
Tam derste seni bekleyenler: 5 kontrol noktalı uygulama adımı, gerçek dünya kullanımı (analist + scientist + AI perspektifi), 4 yaygın tuzak, mülakat sorusu ve model cevabı, 5 soruluk quiz, 8 tekrar kartı ve NovaCommerce proje görevi.