
iki tablodan ilk tablonun tüm kayıtlarını, ikinci tablonun ise sadece ilk tablodaki ile eşleşen ( ortak olan ) kayıtlarını seçmek istediğimizde left join kullanılır.
Daha önce inner join yazımda inner join in sadece iki tabloda da eşleşen kayıtları getirdiğini söylemiştik. left join de ise durum biraz farklı. Burada soldaki tablo yani from dan sonra yazdığımız ilk tablo bizim için ana tablo oluyor ve bu tablodaki kayıtların hepsi eşleşme olsun olmasın listeye geliyor.
Peki eşleşme olmayan kayıtlarda ikinci tablonun kolonları ne olacak? Onlar da NULL (boş) olarak gelir.
kullanıcıların kurslarını listeleyen left join sorgusu ( tüm kolonları seçme)
kullanıcılar tablosu


select * from kullanici
left join
kurs
on
kullanici.kurs_id=kurs.id
sorgumuzu okuyacak olursak; kullanici tablosundaki tüm kayıtları getir, bu kayıtlardan kurs_id değeri kurs tablosundaki id ile eşleşenlerin kurs bilgilerini de yanına ekle demiş oluyoruz.

Burada dikkat ederseniz tüm kullanıcılar listeye geldi. Kurs tablosunda karşılığı olmayan kullanıcıların kurs kolonları ise NULL olarak görünüyor.
eğer sorgumuzu
select
kullanici.id,kullanici.ad,kullanici.kurs_id,kurs.kurs_ad
from kullanici
left join
kurs
on
kullanici.kurs_id=kurs.id
kodları ile değiştirirsek.
sadece seçtiğimiz kolonları getirir.

left join nerede işimize yarar?
Şimdi bir senaryo düşünelim. Sitenizdeki tüm kullanıcıları listelemek istiyorsunuz, kursa kayıtlı olanların yanında da kurs adı görünsün istiyorsunuz. Eğer burada inner join kullanırsanız kursa kayıtlı olmayan kullanıcılar listede hiç görünmez. İşte bu durumda left join kullanmamız gerekir.
Hatta bu sorguya bir where şartı ekleyerek hiçbir kursa kayıtlı olmayan kullanıcıları da kolayca bulabiliriz.
select kullanici.ad from kullanici
left join kurs on kullanici.kurs_id=kurs.id
where kurs.id is null
Bu işlemin tam tersini yani ikinci tablonun tüm kayıtlarını getirmek isterseniz right join yazıma göz atabilirsiniz.
Henüz Yorum Yapılmamış. İlk Yorumu Siz Yapın!