MySQL LEFT JOIN ve INNER JOIN Nedir? Ne İşe Yarar? Aralarındaki Farklar Nelerdir?

"MySQL LEFT JOIN ve INNER JOIN Nedir? Ne İşe Yarar? Aralarındaki Farklar Nelerdir?"

MySQL'de birden fazla tabloyu ilişkilendirerek veri çekmek için JOIN işlemi kullanılır. LEFT JOIN ve INNER JOIN, en sık kullanılan iki JOIN türüdür. Bu makalede, her iki JOIN türünün ne olduğu, nasıl çalıştığı ve aralarındaki farkları detaylı bir şekilde inceleyeceğiz.


JOIN Nedir?

JOIN, MySQL'de iki veya daha fazla tabloyu birleştirerek ilişkili verileri çekmek için kullanılır. Örneğin, kullanıcılar tablosu ile siparişler tablosunu birleştirerek, her kullanıcının yaptığı siparişleri görmek isteyebiliriz. İşte bu noktada JOIN kullanılır.


INNER JOIN Nedir?

INNER JOIN, iki tablo arasında eşleşen kayıtları döndürür. Yani, bir tabloda olmayan bir veri diğer tabloda da bulunmuyorsa, sonuç kümesine dahil edilmez.

INNER JOIN Kullanımı

Aşağıdaki örnekte, users (kullanıcılar) ve orders (siparişler) tablolarını INNER JOIN ile birleştiriyoruz:

SELECT users.id, users.name, orders.order_id, orders.total_price
FROM users
INNER JOIN orders ON users.id = orders.user_id;

INNER JOIN Çalışma Mantığı

  • users tablosunda olup orders tablosunda eşleşen veriler alınır.

  • Eğer bir kullanıcının siparişi yoksa, o kullanıcı sonuçlara dahil edilmez.

INNER JOIN Örnek Tablo Verileri

users tablosu:

id name
1 Ali
2 Ayşe
3 Mehmet

orders tablosu:

order_id user_id total_price
101 1 150
102 2 200

INNER JOIN Sonuç Kümesi:

id name order_id total_price
1 Ali 101 150
2 Ayşe 102 200

Mehmet'in siparişi olmadığı için sonuç kümesine dahil edilmez.


LEFT JOIN Nedir?

LEFT JOIN, sol (birinci) tablodaki tüm kayıtları döndürür ve sağ (ikinci) tabloda eşleşen kayıtları getirir. Eğer sağ tablodan eşleşen bir kayıt yoksa, NULL döndürülür.

LEFT JOIN Kullanımı

SELECT users.id, users.name, orders.order_id, orders.total_price
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

LEFT JOIN Çalışma Mantığı

  • users tablosundaki tüm kullanıcılar getirilecektir.

  • Eğer kullanıcının siparişi varsa, sipariş bilgileri de getirilecektir.

  • Eğer kullanıcının siparişi yoksa, NULL değer döndürülür.

LEFT JOIN Örnek Tablo Verileri

Aynı users ve orders tablolarını kullanarak LEFT JOIN işlemini uygulayalım.

LEFT JOIN Sonuç Kümesi:

id name order_id total_price
1 Ali 101 150
2 Ayşe 102 200
3 Mehmet NULL NULL

Gördüğümüz gibi, Mehmet'in siparişi olmadığı halde kullanıcı listesinde yer almaktadır, ancak sipariş bilgileri NULL olarak dönmüştür.


INNER JOIN ve LEFT JOIN Arasındaki Farklar

Özellik INNER JOIN LEFT JOIN
Kayıt Getirme Sadece eşleşen kayıtları döndürür Sol tablodaki tüm kayıtları döndürür, eşleşme yoksa NULL döner
Boş Sonuç Dönme Eşleşme yoksa sonuç kümesi boş dönebilir Eşleşme olmasa bile sol tablo her zaman listelenir
Performans Daha hızlı olabilir, çünkü sadece eşleşen kayıtları döndürür Daha fazla veri çektiği için performansı etkileyebilir
Kullanım Senaryosu İki tablodan yalnızca ilişkili verileri almak istediğinizde Bir tablodaki tüm kayıtları almak ve diğer tabloda eşleşen verileri görmek istediğinizde

INNER JOIN ve LEFT JOIN Hangi Durumlarda Kullanılır?

INNER JOIN Kullanım Senaryoları:

  • İki tablo arasında bire bir ilişki var ve yalnızca ilişkili verileri almak istiyorsak.

  • Örneğin: Bir öğrencinin sadece geçmişte girdiği sınavları listelemek istiyorsak.

LEFT JOIN Kullanım Senaryoları:

  • Sol tablodaki tüm verileri koruyarak, sağ tablodan eşleşenleri almak istiyorsak.

  • Örneğin: Bir öğrenci listesi oluşturuyoruz ve bazı öğrenciler henüz sınava girmemiş olabilir. Öğrencileri listeleyip sınav sonuçlarını eklemek için LEFT JOIN kullanabiliriz.


 

  • INNER JOIN, sadece eşleşen kayıtları getirirken, LEFT JOIN sol tablodaki tüm verileri getirir ve eşleşmeyenlere NULL değer atar.

  • INNER JOIN daha hızlı çalışabilir çünkü yalnızca ilgili kayıtları çeker, ancak LEFT JOIN daha fazla veriyi işleyeceği için performans açısından dikkat edilmelidir.

  • Kullanım senaryosuna göre hangi JOIN türünü kullanacağınıza karar vermelisiniz.

Bu bilgiler ışığında, ihtiyacınıza en uygun JOIN türünü seçerek MySQL sorgularınızı daha verimli hale getirebilirsiniz. 🚀

Aykhan Gasimzade Aykhan Gasimzade verified icon
Full Stack Developer

Merhaba! Ben Aykhan, 1999 doğumlu bir Azerbaycanlıyım ve 2017 yılından bu yana programlamayla ilgileniyorum. Teknolojinin büyülü dünyası beni her zaman etkilemiştir ve bu merakımı kendi blogumda paylaşarak daha geniş bir kitleyle buluşturmayı amaçlıyorum.