Berk Akademi
Ana Sayfa
ÖZEL KODLAMA DERSLERİ
Yazılım Özel Ders
Tüm birebir programlara genel bakış
Python Yazılım Kursu
Sıfırdan ileri seviyeye birebir Python
Java Yazılım Kursu
OOP odaklı birebir Java eğitimi
AP Computer Science Principles
AP CSP sınav hazırlığı
GRUP DERSLERİ
Python & Django Masterclass
SINIRLI KONTENJAN
Java & Spring Boot Masterclass
SINIRLI KONTENJAN
C# .NET Masterclass
SINIRLI KONTENJAN
VİDEO DERSLER
Sıfırdan Temel Python Kursu
Kendi Hızında Öğren
ÜCRETSİZ
Seviye Testi
Ücretsiz — Python, Java, algoritma seviye testleri
Kariyerini Keşfet
Sertifika Doğrula
Belge numarası ve soyad ile doğrulama

SQL'de INNER JOIN, LEFT JOIN, RIGHT JOIN ve FULL JOIN Arasındaki Farklar

sql-join-turleri-inner-left-right-full-farklari
Bu yazıda neler var?
  1. SQL JOIN Nedir ve Neden Kullanılır?
  2. INNER JOIN: Sadece Eşleşen Satırlar
  3. LEFT JOIN ve RIGHT JOIN: Eksik Eşleşmeleri Görmek
  4. FULL JOIN ve NULL Değerlerin Mantığı
  5. Örnek Tablolarla JOIN Sonuçlarının Karşılaştırılması
  6. Hangi Projede Hangi JOIN Kullanılmalı?
  7. JOIN Mantığını Pratikte Oturtmak
  8. Sık Sorulan Sorular

SQL JOIN türleri, iki veya daha fazla tabloyu ortak bir sütun üzerinden birleştirip tek bir sonuç kümesi oluşturmanın yollarıdır. INNER JOIN yalnızca iki tabloda da eşleşen satırları getirirken, LEFT JOIN sol tablodaki tüm satırları (eşleşme olmasa bile) korur, RIGHT JOIN aynı mantığı sağ tablo için uygular ve FULL JOIN her iki tablonun tüm satırlarını, eşleşmeyenleri NULL ile doldurarak bir araya getirir. Bu dört join türü arasındaki fark, aslında hangi satırların sonuçta "kaybolmasına izin verildiği" sorusuna verilen farklı cevaplardır. Bu yazıda her birini örnek tablolar üzerinden adım adım göreceğiz.

SQL JOIN Nedir ve Neden Kullanılır?

Gerçek veritabanlarında bilgi tek bir devasa tabloda tutulmaz; bunun yerine veriler mantıksal olarak ayrılır. Bir e-ticaret sisteminde kullanıcılar bir tabloda, siparişleri ise ayrı bir tabloda durur. Sorun şu ki bir kullanıcının hangi siparişleri verdiğini görmek istediğinizde, bu iki tabloyu bir şekilde "konuşturmanız" gerekir. İşte JOIN tam olarak bunu yapar: iki tabloyu, aralarındaki ortak bir sütun (genellikle bir kimlik numarası) üzerinden mantıksal olarak birleştirir ve size sanki tek bir tablomuş gibi görünen bir sonuç kümesi sunar.

Bu birleştirmenin nasıl yapılacağını belirleyen kısım ON koşuludur. ON, veritabanı motoruna "bu iki tabloyu hangi sütunlara göre eşleştireyim" sorusunun cevabını verir. Örneğin ON kullanicilar.id = siparisler.kullanici_id ifadesi, kullanıcılar tablosundaki id sütunu ile siparişler tablosundaki kullanici_id sütunu eşleştiğinde satırların birleştirileceğini söyler. ON koşulu yanlış yazıldığında ya beklenenden çok daha az satır döner ya da tablolar anlamsız biçimde çarpraz olarak birleşir; bu yüzden JOIN öğrenirken en çok emek verilmesi gereken yer, sütun isimlerini ezberlemek değil, hangi sütunun hangi sütunla eşleştiğini kavramaktır.

JOIN mantığını anlamanın en pratik yolu, iki tabloyu yan yana kağıda çizip satır satır hangi kayıtların eşleştiğini işaretlemektir. Bu görsel alışkanlık, ilerleyen bölümlerde göreceğiniz INNER, LEFT, RIGHT ve FULL JOIN arasındaki farkı ezbersiz biçimde kavramanızı sağlar. Çünkü dört join türü de aynı ON koşulunu kullanır; aralarındaki tek fark, eşleşmeyen satırlara ne yapılacağına dair verdikleri karardır.

INNER JOIN: Sadece Eşleşen Satırlar

INNER JOIN: Sadece Eşleşen Satırlar

INNER JOIN, JOIN türleri arasında en sık kullanılanıdır ve mantığı oldukça nettir: yalnızca ON koşulunu sağlayan, yani her iki tabloda da karşılığı bulunan satırları sonuç kümesine dahil eder. Bir kullanıcının siparişi yoksa, INNER JOIN ile yazılmış bir sorguda o kullanıcı sonuçta hiç görünmez. Aynı şekilde, sahibi olmayan bir sipariş kaydı da (böyle bir veri bütünlüğü hatası varsa) sonuçtan düşer. Bu davranış, "bana yalnızca gerçekten ilişkili olan verileri göster" dediğiniz durumlar için idealdir; örneğin sipariş vermiş kullanıcıların listesini çıkarmak isterseniz INNER JOIN tam olarak aradığınız sonucu verir.

ON koşulunun burada oynadığı rol, iki tablo arasındaki eşleşme kriterini tanımlamaktır ve INNER JOIN bu kriteri sağlamayan hiçbir satırı görmezden gelir. Pratikte bu, sorgunun önce tüm olası satır kombinasyonlarını değil, sadece ON ifadesinin doğru (true) döndüğü kombinasyonları seçtiği anlamına gelir. Yeni başlayan biri için en kritik nokta şudur: INNER JOIN'de veri kaybı bir hata değil, tasarımın gereğidir; siz zaten yalnızca eşleşen kayıtları istiyorsunuzdur.

Python ile veritabanı programlamaya yeni başlayanlar için INNER JOIN, sorgu mantığını oturtmanın en sağlam ilk adımıdır. Çünkü NULL değerlerle uğraşmadan, sade bir "eşleşme var mı yok mu" mantığıyla ilerlemenizi sağlar. Bu temel iyice oturduktan sonra LEFT ve RIGHT JOIN gibi daha esnek yapılara geçmek çok daha kolay hale gelir. birebir Python dersleri kapsamında bu tür sorgu mantığı, kod yazmadan önce kâğıt üzerinde tablo eşleştirme alıştırmalarıyla pekiştirilir; çünkü JOIN'i gerçekten anlamak, syntax'ı ezberlemekten çok daha değerlidir.

LEFT JOIN ve RIGHT JOIN: Eksik Eşleşmeleri Görmek

LEFT JOIN, INNER JOIN'in aksine sol tarafta yazılan tablonun tüm satırlarını korur; sağ tabloda eşleşme bulunamayan satırlar için ise o sütunlara NULL değeri yerleştirir. Bu, "hiç sipariş vermemiş kullanıcılar dahil, tüm kullanıcıları listele" gibi bir ihtiyacı karşılamanın doğru yoludur. RIGHT JOIN ise tamamen aynı mantığı, bu kez sağ tabloyu esas alarak uygular: sağ tablodaki tüm satırlar korunur, sol tabloda karşılığı olmayanlar NULL ile doldurulur. Pratikte RIGHT JOIN, sorgudaki tablo sırası değiştirilip LEFT JOIN olarak da yazılabilir; bu yüzden birçok geliştirici günlük çalışmasında ağırlıklı olarak LEFT JOIN kullanmayı tercih eder.

NULL değerlerin ortaya çıkışını somut görmek için basit bir örnek üzerinden ilerleyelim. Aşağıdaki sorgu, kullanicilar tablosundaki her satırı korurken, siparisler tablosunda eşleşme bulunamayan kullanıcılar için sipariş bilgilerini NULL olarak döndürür:

SELECT kullanicilar.ad, siparisler.urun_adi, siparisler.tarih
FROM kullanicilar
LEFT JOIN siparisler
  ON kullanicilar.id = siparisler.kullanici_id;

Bu sorgu çalıştırıldığında, hiç sipariş vermemiş bir kullanıcı da sonuç kümesinde görünür; ancak urun_adi ve tarih sütunları o satır için NULL olarak gelir. Bu davranış, raporlama senaryolarında büyük önem taşır: örneğin "hangi kullanıcılar hiç alışveriş yapmadı" sorusunun cevabını, sonuçta WHERE siparisler.kullanici_id IS NULL filtresiyle kolayca bulabilirsiniz.

Java ile kurumsal veritabanı uygulamaları geliştirirken bu tür eksik eşleşmeleri doğru yorumlamak, özellikle raporlama ve stok takibi gibi modüllerde kritik hale gelir; bir kaydın neden NULL geldiğini anlamayan bir geliştirici, hatalı iş mantığı kurma riskiyle karşı karşıya kalır. birebir Java dersleri sürecinde öğrencilere JOIN sorgularının sonucunu satır satır okutup NULL'ların nereden geldiğini analiz ettirmek, bu kavramın kalıcı biçimde öğrenilmesini sağlayan en etkili yöntemlerden biridir.

FULL JOIN ve NULL Değerlerin Mantığı

FULL JOIN (bazı veritabanı sistemlerinde FULL OUTER JOIN olarak yazılır), iki tablodaki tüm satırları bir araya getirir: eşleşenler birleştirilir, eşleşmeyenler ise karşı taraftan gelen sütunlar boş bırakılarak sonuca dahil edilir. Yani LEFT JOIN'in "sol tablodaki her şeyi göster" mantığı ile RIGHT JOIN'in "sağ tablodaki her şeyi göster" mantığı burada birleşir. Sonuçta hem sol tabloda karşılığı olmayan satırlar hem de sağ tabloda karşılığı olmayan satırlar aynı sorguda görünür hale gelir.

Bu noktada NULL değerlerin hangi taraftan geldiğini ayırt etmek kritik önemdedir. Bir satırda sağ tablonun sütunları NULL ise, bu satır sol tablodan gelmiş ama sağ tabloda eşleşmesi olmayan bir kayıttır. Tam tersi durumda, sol tablonun sütunları NULL ise o satır sağ tablodan gelmiş ama sol tabloda karşılığı bulunmayan bir kayıttır. Bu ayrımı yapamayan bir öğrenci, FULL JOIN sonucunu okurken hangi verinin nereden geldiğini karıştırır ve yanlış yorum çıkarır.

Aşağıdaki örnek, kullanıcılar ve siparişler tablosu üzerinden bu mantığı gösterir:

SELECT kullanicilar.ad, siparisler.siparis_no
FROM kullanicilar
FULL JOIN siparisler
ON kullanicilar.id = siparisler.kullanici_id;

Bu sorgu çalıştırıldığında hem siparişi olmayan kullanıcılar (siparis_no sütunu NULL) hem de herhangi bir nedenle kullanıcı kaydı silinmiş ama siparişi hâlâ duran satırlar (ad sütunu NULL) aynı sonuç kümesinde görünür. FULL JOIN'in pratikte en sık kullanıldığı senaryo, iki tablo arasındaki tutarsızlıkları veya eksik veri noktalarını tespit etmektir; örneğin bir raporlama sorgusunda "hangi kayıtlar eşleşmiyor" sorusuna doğrudan cevap verir.

JOIN mantığını bu seviyede kavramak aslında bir algoritmik düşünme egzersizidir; iki kümenin kesişimini, farkını ve birleşimini zihinde canlandırmak gerekir. Bu tür küme mantığına ne kadar hakim olduğunuzu görmek isterseniz algoritma bilgi seviyeni ölç testiyle kendinizi kısa sürede değerlendirebilirsiniz.

Örnek Tablolarla JOIN Sonuçlarının Karşılaştırılması

Örnek Tablolarla JOIN Sonuçlarının Karşılaştırılması

Aynı örnek üzerinden dört JOIN türünü yan yana görmek, aradaki farkı ezberlemeden kavramanın en hızlı yoludur. Elimizde iki basit tablo olduğunu varsayalım: kullanıcılar tablosunda id ve ad sütunları, siparişler tablosunda ise siparis_no ve kullanici_id sütunları bulunsun. Diyelim ki üç kullanıcıdan sadece ikisinin siparişi var ve bir sipariş kaydının kullanici_id değeri hiçbir kullanıcıya karşılık gelmiyor. Bu senaryo, dört JOIN türünün davranışını birbirinden ayırmak için yeterli çeşitliliği sağlar.

Aşağıdaki tablo, aynı iki tablo üzerinde çalıştırılan dört farklı JOIN sorgusunun mantıksal olarak neyi döndürdüğünü ve NULL değerlerin hangi durumda ortaya çıktığını özetler:

JOIN Türü Döndürdüğü Satırlar NULL Durumu
INNER JOIN Sadece her iki tabloda da eşleşmesi olan satırlar NULL üretmez, eşleşmeyenler sonuçtan tamamen düşer
LEFT JOIN Sol tablodaki tüm satırlar + varsa eşleşen sağ tablo verisi Sağ tabloda eşleşme yoksa sağ sütunlar NULL olur
RIGHT JOIN Sağ tablodaki tüm satırlar + varsa eşleşen sol tablo verisi Sol tabloda eşleşme yoksa sol sütunlar NULL olur
FULL JOIN Her iki tablonun tüm satırları, eşleşen veya eşleşmeyen fark etmeksizin Hangi tarafta eşleşme yoksa o tarafın sütunları NULL olur

Bu tabloyu okurken dikkat edilmesi gereken nokta, "döndürdüğü satır sayısının" tabloların içeriğine göre değiştiğidir; sabit bir kural yerine bir mantık çerçevesi olarak ele alınmalıdır. Örneğin INNER JOIN'de üç kullanıcıdan sadece eşleşen iki tanesi görünürken, LEFT JOIN'de üçü de görünür ve eşleşmeyen kullanıcının sipariş sütunu boş kalır. Aynı veri seti üzerinde dört sorguyu sırayla yazıp sonuçları karşılaştırmak, JOIN mantığını kalıcı şekilde öğrenmenin en pratik yoludur.

Hangi Projede Hangi JOIN Kullanılmalı?

JOIN türü seçimi, veri modelinin doğasına ve raporlama ihtiyacına göre değişir; doğru seçim genellikle "hangi tarafın eksiksiz görünmesi gerektiği" sorusuna verilen cevaptan çıkar. Bir öğrencinin bu kararı sistematik biçimde vermesi için aşağıdaki çerçeve kullanılabilir:

  1. Sadece iki tarafta da karşılığı olan, tutarlı ve tam veriyle mi ilgileniyorsunuz? Öyleyse INNER JOIN yeterlidir.
  2. Ana tablodaki (örneğin kullanıcılar) her kaydın, ilişkili veri olmasa bile listede görünmesi mi gerekiyor? Bu durumda LEFT JOIN doğru tercihtir.
  3. İkincil tablodaki (örneğin siparişler) her kaydın, sahibi bulunmasa bile görünmesi mi isteniyor? RIGHT JOIN bu ihtiyacı karşılar; pratikte çoğu geliştirici aynı sonucu LEFT JOIN ile tablo sırasını değiştirerek de yazar.
  4. Her iki tablodaki eksik ve tutarsız kayıtları birlikte tespit etmek mi amaçlanıyor? FULL JOIN, veri temizliği ve denetim senaryolarında bu ihtiyacı karşılar.

Somut bir örnek vermek gerekirse: bir e-ticaret projesinde "hiç sipariş vermemiş kullanıcıları listele" raporu istendiğinde INNER JOIN kullanmak yanlış sonuç verir, çünkü bu JOIN türü zaten eşleşmeyen satırları eler. Doğru yaklaşım, LEFT JOIN yazıp WHERE koşuluyla sipariş sütununun NULL olduğu satırları filtrelemektir. Bu tür küçük ama kritik kararlar, bir öğrencinin saf SQL mantığını ne kadar içselleştirdiğini gösterir ve gerçek projelerde sık karşılaşılan bir hata kaynağıdır.

JOIN seçimini doğru yapabilmek, aslında genel yazılım geliştirme becerisiyle de doğrudan ilişkilidir; veri ilişkilerini doğru kurgulamak Python ve Java tarafında yazılan sorgu katmanlarının doğruluğunu belirler. Bu tür temel becerilerinizin hangi seviyede olduğunu merak ediyorsanız ücretsiz yazılım bilgisi testini çözerek kendinizi kısa sürede ölçebilirsiniz.

JOIN Mantığını Pratikte Oturtmak

JOIN türlerini yalnızca tanımlarını okuyarak akılda tutmak zordur; bu mantık ancak elleri kirletilerek, yani gerçek sorgular yazılıp sonuçlar gözlemlenerek kalıcı hale gelir. Yeni başlayan bir öğrenci için en sağlıklı yöntem, küçük ve anlaşılır iki tablo (örneğin "öğrenciler" ve "kayıtlar") üzerinde önce INNER JOIN yazmak, ardından aynı sorguyu LEFT JOIN'e çevirip sonuçtaki fark satırlarını tek tek incelemektir. Sonuç kümesindeki her NULL değerin neden orada göründüğünü açıklayabilmek, JOIN mantığının gerçekten oturduğunun en güvenilir göstergesidir.

Pratik alıştırma için şu adımları izlemek faydalı olur: aynı iki tabloyu dört farklı JOIN türüyle sorgulayıp satır sayılarını karşılaştırmak, sonra kasıtlı olarak eşleşmeyen bir kayıt eklemek ve bu kaydın hangi JOIN türlerinde görünüp hangilerinde kaybolduğunu izlemek. Bu tekrar, JOIN'in soyut bir kural değil, iki tablo arasındaki ilişkiyi görselleştiren bir araç olduğunu net biçimde gösterir. Python veya Java ile veritabanına bağlanan küçük programlar yazmak isteyenler için temel seviyeden ilerleyen video eğitim içerikleri bu tür alıştırmaları adım adım pekiştirmek açısından uygun bir başlangıç noktası olabilir.

JOIN konusunu özetlemek gerekirse, akılda kalması gereken temel noktalar şunlardır:

  • INNER JOIN yalnızca her iki tabloda da eşleşen satırları getirir.
  • LEFT JOIN sol tablodaki tüm satırları korur, eşleşme yoksa sağ taraf NULL olur.
  • RIGHT JOIN aynı mantığı sağ tablo lehine uygular.
  • FULL JOIN her iki tarafın da eşleşmeyen satırlarını NULL değerlerle birlikte gösterir.
  • NULL, hata değil; ilişkinin o noktada eksik olduğunu gösteren bir bilgidir.

Bu beş maddeyi küçük tablolar üzerinde defalarca test etmek, ileride daha karmaşık çok tablolu sorgular yazarken doğru JOIN türünü seçme becerisini otomatik hale getirir.

Sık Sorulan Sorular

INNER JOIN ile LEFT JOIN arasındaki temel fark nedir?

INNER JOIN yalnızca her iki tabloda karşılığı olan, yani eşleşen satırları sonuç kümesine dahil eder. LEFT JOIN ise sol tablodaki tüm satırları korur; sağ tabloda eşleşme bulunamazsa o satıra ait sütunlar NULL olarak doldurulur. Kısacası INNER JOIN daraltıcı, LEFT JOIN ise sol tarafı garanti altına alan bir yaklaşımdır.

LEFT JOIN sonucunda NULL değerler neden ortaya çıkar?

LEFT JOIN, sol tablodaki her satırı sonuçta tutmayı garanti eder. Sağ tabloda o satıra karşılık gelen bir kayıt yoksa veritabanı motoru bu boşluğu bir veri uydurarak değil, NULL değeriyle işaretleyerek doldurur. Bu, ilgili ilişkinin o an için eksik veya hiç kurulmamış olduğunu gösteren mantıksal bir sinyaldir.

RIGHT JOIN pratikte ne zaman tercih edilir?

RIGHT JOIN, öncelik verilmesi gereken tablo sorgunun sağ tarafında yazıldığında ve o tablodaki tüm kayıtların, sol tarafta eşleşme olsun olmasın sonuçta görünmesi istendiğinde tercih edilir. Birçok geliştirici aynı sonucu sol ve sağ tabloyu yer değiştirip LEFT JOIN ile yazmayı da tercih eder; her iki yaklaşım da aynı mantığı taşır.

FULL JOIN her veritabanında aynı şekilde çalışır mı?

FULL JOIN'in temel mantığı her yerde aynıdır: her iki tablonun eşleşen ve eşleşmeyen tüm satırlarını NULL değerlerle birlikte getirir. Ancak bu ifadeyi yazmak için kullanılan sözdizimi ve desteklenme biçimi kullanılan sisteme göre değişiklik gösterebilir; bu yüzden çalıştığın veritabanı sisteminin resmi dokümantasyonuna göz atmak her zaman iyi bir alışkanlıktır.

JOIN kullanırken en sık yapılan hata nedir?

En sık karşılaşılan hata, JOIN koşulunu (ON ifadesini) eksik veya yanlış yazarak istenmeyen sayıda satır üretmektir; bu genellikle "kartezyen çarpım" benzeri şişmiş sonuç kümeleriyle fark edilir. Bir diğer yaygın hata ise LEFT veya RIGHT JOIN sonucunda ortaya çıkan NULL değerleri hesaba katmadan filtreleme veya toplama işlemi yapmaktır; bu da beklenenden az veya yanlış sonuçlara yol açar.

JOIN türlerini kâğıt üzerinde ezberlemek yerine küçük tablolarla tekrar tekrar deneyerek pekiştirmek, veritabanı sorgularında kalıcı ve sağlam bir temel oluşturur. Bu temeli daha geniş bir müfredat içinde adım adım ilerletmek isteyenler 1-1 özel Python dersleri sayfasını inceleyebilir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar
Berk Keskin — Yazılım Geliştirici ve Eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; bugün öğrencinin seviyesine ve hedefine göre şekillenen sürdürülebilir öğrenme sistemleri tasarlıyor. 500'den fazla kişiye ezber değil, düşünerek kod yazmayı öğretti — Berk Akademi'de izlemeye değil üretmeye dayalı öğrenme kültürünü o kuruyor.

WhatsApp Hemen Ara