herkese selamm.. Veritabanlarında çoğu zaman veriler birden fazla tabloya dağıtılmıştır. Bu nedenle, anlamlı sonuçlar elde edebilmek için bu tablolar arasında ilişki kurmak ve verileri bir araya getirmek gerekir. SQL dilinde bu işlemi gerçekleştirmek için kullanılan en yaygın komutlardan biri JOIN komutudur.
Bu makalede, SQL’de JOIN komutunun ne olduğunu, hangi türlerinin bulunduğunu ve her birini örneklerle nasıl kullanabileceğimizi inceleyeceğiz.
JOIN Nedir?
JOIN
, iki veya daha fazla tabloyu ortak bir sütun üzerinden birleştirmek için kullanılır. Genellikle tablolar arasındaki ilişki, bir tablodaki bir sütunun diğer tablodaki bir sütuna karşılık gelmesiyle kurulur.
Örneğin:
-
Customers
tablosunda müşteri bilgileri, -
Orders
tablosunda ise sipariş bilgileri bulunabilir.
Her iki tabloda da müşteri ID’si (CustomerID
) bulunduğundan, bu sütunlar üzerinden ilişki kurarak bir müşterinin hangi siparişleri verdiğini görebiliriz.
JOIN Türleri
SQL’de temel olarak dört tür JOIN bulunur:
-
INNER JOIN
-
LEFT JOIN (veya LEFT OUTER JOIN)
-
RIGHT JOIN (veya RIGHT OUTER JOIN)
-
FULL JOIN (veya FULL OUTER JOIN)
1. INNER JOIN
INNER JOIN
, iki tabloda da eşleşen kayıtları getirir. Yani, sadece her iki tabloda da ortak olan veriler döndürülür.
Örnek:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Bu sorgu, hem Customers
hem de Orders
tablolarında eşleşen CustomerID
olan kayıtları getirir. Sonuç olarak yalnızca siparişi olan müşteriler listelenir.
2. LEFT JOIN
LEFT JOIN
, sol tablodaki tüm kayıtları getirir ve sağ tabloda eşleşme yoksa NULL değer gösterir.
Örnek:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Bu sorgu, tüm müşterileri listeler. Eğer bir müşteri hiç sipariş vermemişse, OrderDate
sütunu NULL
olacaktır.
3. RIGHT JOIN
RIGHT JOIN
, sağ tablodaki tüm kayıtları getirir. Sol tabloda eşleşme yoksa, NULL gösterilir.
Örnek:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Bu sorgu, tüm siparişleri listeler. Eğer bir siparişe ait müşteri bilgisi yoksa (örneğin müşteri kaydı silinmişse), müşteri ismi NULL
olur.
4. FULL JOIN
FULL JOIN
, her iki tablodaki tüm verileri getirir. Eşleşme yoksa NULL gösterilir. Ancak bu JOIN türü bazı veritabanlarında (örneğin MySQL) doğrudan desteklenmez. Genellikle UNION
ile benzetilir.
Örnek:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Bu sorgu, her iki tabloda bulunan tüm kayıtları döndürür. Eşleşmeyen kayıtlar için eksik taraf NULL
olur.
Not: FULL JOIN, bazı SQL motorlarında desteklenmediği için alternatif çözümler gerekebilir:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
UNION
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Gerçek Hayat Örneği
Farz edelim ki bir e-ticaret sistemimiz var ve iki tablomuz şöyle:
Tablo: Customers
CustomerID | CustomerName |
---|---|
1 | Ali |
2 | Ayşe |
3 | Mehmet |
Tablo: Orders
OrderID | CustomerID | OrderDate |
---|---|---|
101 | 1 | 2024-01-01 |
102 | 2 | 2024-01-02 |
Bu tablolar üzerinden INNER JOIN
kullanırsak:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Sonuç:
CustomerName | OrderDate |
---|---|
Ali | 2024-01-01 |
Ayşe | 2024-01-02 |
Mehmet’in hiç siparişi olmadığından listede görünmez.
Eğer LEFT JOIN
kullanırsak:
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Sonuç:
CustomerName | OrderDate |
---|---|
Ali | 2024-01-01 |
Ayşe | 2024-01-02 |
Mehmet | NULL |
JOIN Kullanırken Dikkat Edilmesi Gerekenler
-
İlişkili sütunların doğru tanımlanması gerekir. Yanlış sütunlar üzerinden JOIN yapmak hatalı sonuçlara yol açabilir.
-
Performans sorunları olabilir. Büyük tablolarda JOIN işlemleri yavaş çalışabilir. Bu nedenle uygun indeksleme önemlidir.
-
Aliasing (takma ad) kullanmak sorguları okunabilir kılar.
Örnek:
SELECT c.CustomerName, o.OrderDate
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID;
SQL’de JOIN
komutu, birden fazla tabloyu ilişkilendirmek ve analiz edilebilir anlamlı veri setleri oluşturmak için vazgeçilmezdir. INNER JOIN
, LEFT JOIN
, RIGHT JOIN
ve FULL JOIN
gibi farklı türleri ile çeşitli senaryolara uygun sorgular oluşturabilirsiniz. Özellikle ilişkisel veritabanlarında çalışırken JOIN komutlarını doğru anlamak ve kullanmak, daha güçlü ve verimli sorgular yazmanızı sağlar.
JOIN komutunu kullanarak siz de veritabanı tablolarını bir araya getirebilir ve daha zengin analizler yapabilirsiniz.