DBAtlas · Veritabanı operasyon atlası

JOIN türleri (INNER/LEFT/RIGHT/FULL/CROSS)

Oracle

-- INNER: eşleşen satırlar
SELECT m.ad, s.tutar
FROM musteri m JOIN siparis s ON m.id = s.musteri_id;
-- LEFT: siparişi olmayan müşteriler de gelir
SELECT m.ad, s.tutar
FROM musteri m LEFT JOIN siparis s ON m.id = s.musteri_id;
-- CROSS: kartezyen çarpım
SELECT r.ad, u.ad FROM renk r CROSS JOIN urun u;

JOIN iki tabloyu belirtilen koşula göre birleştirir. INNER yalnız eşleşenleri; LEFT/RIGHT bir taraftaki tüm satırları (eşleşme yoksa NULL); FULL her iki taraftakileri; CROSS tüm kombinasyonları döndürür. Oracle standart ANSI JOIN yanında eski (+) dış birleştirme söz dizimini de destekler.

PostgreSQL

SELECT m.ad, s.tutar
FROM musteri m INNER JOIN siparis s ON m.id = s.musteri_id;

SELECT m.ad, s.tutar
FROM musteri m LEFT JOIN siparis s ON m.id = s.musteri_id;

SELECT m.ad, s.tutar
FROM musteri m FULL OUTER JOIN siparis s ON m.id = s.musteri_id;

PostgreSQL tüm standart JOIN türlerini (INNER, LEFT/RIGHT/FULL OUTER, CROSS) tam destekler. USING(sutun) ortak adlı sütunlarda kısa yazım, NATURAL JOIN ise aynı adlı tüm sütunlarda otomatik birleştirme sağlar (dikkatli kullanın).

MySQL

SELECT m.ad, s.tutar
FROM musteri m INNER JOIN siparis s ON m.id = s.musteri_id;

SELECT m.ad, s.tutar
FROM musteri m LEFT JOIN siparis s ON m.id = s.musteri_id;

-- MySQL'de FULL OUTER JOIN yoktur:
SELECT m.ad, s.tutar FROM musteri m LEFT JOIN siparis s ON m.id = s.musteri_id
UNION
SELECT m.ad, s.tutar FROM musteri m RIGHT JOIN siparis s ON m.id = s.musteri_id;

MySQL/MariaDB INNER, LEFT, RIGHT ve CROSS JOIN'i destekler ama FULL OUTER JOIN'i doğrudan sunmaz; LEFT ve RIGHT sonuçlarını UNION ile birleştirerek taklit edilir. Virgülle yazılan eski birleştirme kartezyen çarpım üretir, ON/WHERE ile kısıtlanmalıdır.

SQL Server

SELECT m.ad, s.tutar
FROM musteri m INNER JOIN siparis s ON m.id = s.musteri_id;

SELECT m.ad, s.tutar
FROM musteri m LEFT JOIN siparis s ON m.id = s.musteri_id;

SELECT m.ad, s.tutar
FROM musteri m FULL OUTER JOIN siparis s ON m.id = s.musteri_id;

SQL Server tüm standart JOIN türlerini destekler. Eski *= / =* dış birleştirme operatörleri artık kaldırılmıştır; ANSI JOIN söz dizimi kullanılmalıdır. APPLY (CROSS/OUTER APPLY) ise satır bazlı ilişkili alt sorgular için ek bir birleştirme biçimidir.

MongoDB

// En yakın karşılık: $lookup (sol dış birleştirme)
db.musteri.aggregate([
  { $lookup: {
      from: "siparis",
      localField: "id",
      foreignField: "musteri_id",
      as: "siparisler"
  } }
])

MongoDB'de klasik JOIN yoktur; $lookup aggregation aşaması bir koleksiyondan eşleşen belgeleri dizi olarak getirir (sol dış birleştirmeye benzer). INNER benzeri sonuç için sonrasında $match ile boş dizileri süzer, $unwind ile diziyi satırlara açarsınız.

Redis

# Uygulanamaz: Redis'te tablo ve JOIN yoktur.

Redis ilişkisel birleştirme sunmaz; veriler genelde denormalize edilir veya ilişkiler istemci tarafında birden çok anahtarı okuyarak kurulur. Sınırlı birleştirme benzeri sorgular için RediSearch (FT.AGGREGATE) kullanılabilir; RedisGraph modülünün desteği 2023'te sona erdi.

Elasticsearch

# Uygulanamaz: dağıtık yapıda genel JOIN yoktur.
# Sınırlı seçenekler: nested, parent/child (join alanı),
# terms lookup. Genelde veri indeksleme sırasında denormalize edilir.

Elasticsearch dağıtık mimarisi nedeniyle rastgele tablolar arası JOIN sunmaz. Sınırlı ilişki için tek index içinde 'nested' ve aynı shard'da 'join' (parent/child) alan tipleri vardır. En yaygın çözüm veriyi indeksleme aşamasında denormalize etmektir.

DBAtlas'ta aç →