SQL JOIN'lar, ilişkisel veritabanı yönetim sistemlerinin (RDBMS) temel taşlarından biridir. Farklı tablolardaki ilgili verileri birleştirmek için kullanılırlar. Bir veritabanında, bilgiler genellikle mantıksal olarak ayrılmış birden fazla tabloya dağıtılır. Örneğin, bir "Müşteriler" tablosu müşteri bilgilerini, bir "Siparişler" tablosu ise sipariş detaylarını içerebilir. Bu iki tablonun ortak bir sütunu (örneğin, MüşteriID) aracılığıyla ilişkilendirilmesi gerekebilir. İşte bu noktada JOIN işlemleri devreye girer. JOIN'lar, bir veya daha fazla tablodan sütunları, belirli bir ilişki (genellikle birincil ve yabancı anahtar ilişkisi) üzerinden bir araya getirerek anlamlı ve bütünsel bir veri kümesi oluşturmamızı sağlar. Bu rehberde, SQL'deki farklı JOIN türlerini, kullanım senaryolarını, sözdizimlerini ve pratik örneklerini detaylı bir şekilde inceleyeceğiz. Amaç, veritabanı sorgularınızda JOIN'ları etkili ve doğru bir şekilde kullanarak, ihtiyacınız olan verilere ulaşabilmenizi sağlamaktır. Veritabanı yönetiminde esneklik ve güç sağlayan JOIN'lar, karmaşık raporlamadan veri analizine kadar birçok alanda vazgeçilmezdir. Doğru JOIN türünü seçmek, hem sorgu performansını hem de elde edilen verinin doğruluğunu doğrudan etkiler. Bu nedenle, her bir JOIN türünün mantığını ve farklarını iyi kavramak kritik öneme sahiptir.
INNER JOIN (İç Birleştirme)
INNER JOIN, en sık kullanılan JOIN türüdür. İki veya daha fazla tablonun kesişim kümesindeki, yani her iki tabloda da eşleşen kayıtlardaki verileri döndürür. Eğer eşleşen bir kayıt yoksa, o kayıt sonuç kümesinde yer almaz. Genellikle, tablolardaki ortak sütunlar (örneğin, birincil anahtar ve yabancı anahtar) üzerinden birleştirme yapılır.
Sözdizimi:
Örnek Senaryo:
"Müşteriler" ve "Siparişler" adında iki tablomuz olsun.
Şimdi, sadece sipariş vermiş müşterilerin adlarını ve sipariş bilgilerini getirelim:
LEFT JOIN (Sol Dış Birleştirme)
LEFT JOIN, sol tablodaki tüm kayıtları ve sağ tablodaki eşleşen kayıtları döndürür. Eğer sağ tabloda eşleşen bir kayıt yoksa, sol tablonun kayıtları yine de getirilir ve sağ tablonun sütunları için NULL değerleri döndürülür. `LEFT OUTER JOIN` ifadesi `LEFT JOIN` ile aynı anlama gelir ve daha az kullanılır.
Sözdizimi:
Örnek Senaryo:
Yukarıdaki "Müşteriler" ve "Siparişler" tablolarını kullanarak, tüm müşterileri ve varsa siparişlerini listeleyelim. Siparişi olmayan müşteriler de listede yer almalıdır.
LEFT JOIN ile eşleşmeyen kayıtları bulma:
LEFT JOIN'ın önemli bir kullanım alanı, bir tabloda olup diğerinde olmayan kayıtları bulmaktır. Örneğin, hiç sipariş vermemiş müşterileri bulmak:
RIGHT JOIN (Sağ Dış Birleştirme)
RIGHT JOIN, LEFT JOIN'ın tam tersidir. Sağ tablodaki tüm kayıtları ve sol tablodaki eşleşen kayıtları döndürür. Eğer sol tabloda eşleşen bir kayıt yoksa, sağ tablonun kayıtları getirilir ve sol tablonun sütunları için NULL değerleri döndürülür. `RIGHT OUTER JOIN` ifadesi `RIGHT JOIN` ile aynı anlama gelir.
Sözdizimi:
Örnek Senaryo:
Yukarıdaki "Müşteriler" ve "Siparişler" tablolarını kullanarak, tüm siparişleri ve varsa ilgili müşteri bilgilerini listeleyelim. Müşterisi silinmiş veya hatalı girilmiş siparişler (MusteriID'si Musteriler tablosunda olmayan) de listede yer almalıdır.
FULL OUTER JOIN (Tam Dış Birleştirme)
FULL OUTER JOIN, hem sol hem de sağ tablodaki tüm kayıtları döndürür. Eğer bir tabloda diğer tabloyla eşleşen bir kayıt yoksa, o tablonun ilgili sütunları için NULL değerleri döndürülür. Hem LEFT JOIN hem de RIGHT JOIN'ın birleşimi gibidir. Bu JOIN türü, her iki kümedeki tüm verileri görmek istediğinizde kullanışlıdır, örneğin iki tablonun eşleşen ve eşleşmeyen kayıtlarını aynı anda incelemek.
Sözdizimi:
Örnek Senaryo:
Müşteriler ve Siparişler tablolarındaki tüm kayıtları, eşleşen veya eşleşmeyen tüm durumlarıyla birlikte görelim.
Not: Bazı veritabanı sistemleri (örneğin MySQL), doğrudan FULL OUTER JOIN'ı desteklemez. Bu durumda, LEFT JOIN ve RIGHT JOIN'ı UNION operatörü ile birleştirerek aynı etkiyi elde edebilirsiniz:
Dikkat: UNION, varsayılan olarak tekrar eden satırları kaldırır. Eğer tekrar eden satırları dahil etmek isterseniz UNION ALL kullanabilirsiniz. Ancak FULL OUTER JOIN'ın mantığında genellikle tekrar eden satırlar olmaz, çünkü her satır bir kez eşleştirilir veya NULL ile tamamlanır.
CROSS JOIN (Kartezyen Çarpım)
CROSS JOIN, iki tablo arasındaki tüm olası kayıt kombinasyonlarını döndürür. Bir tablonun her bir satırı, diğer tablonun her bir satırı ile eşleştirilir. Bu, genellikle çok büyük sonuç kümeleriyle sonuçlanır ve çoğu zaman bilinçli olarak kullanılmaz, ancak bazı özel durumlarda (örneğin, test verisi oluşturma veya tüm olası kombinasyonları listeleme) faydalı olabilir. ON koşulu kullanılmaz.
Sözdizimi:
Veya eski sözdizimi:
Örnek Senaryo:
Küçük "Renkler" ve "Boyutlar" tablolarımız olsun:
Tüm olası renk-boyut kombinasyonlarını listeleyelim:
SELF JOIN (Kendi Kendine Birleştirme)
SELF JOIN, bir tablonun kendi kendisiyle birleştirilmesi işlemidir. Bu, aynı tablodaki satırlar arasında ilişkiler bulmak istediğinizde kullanışlıdır. Örneğin, bir "Çalışanlar" tablosunda çalışanların yöneticilerini (ki onlar da aynı tabloda birer çalışandır) bulmak için kullanılabilir. SELF JOIN'da, tablonun farklı örneklerini oluşturmak için takma adlar (alias) kullanmak zorunludur, aksi takdirde sorgu belirsiz olur.
Sözdizimi (genellikle INNER JOIN veya LEFT JOIN ile kullanılır):
Örnek Senaryo:
Bir "Çalışanlar" tablomuz olsun, burada her çalışanın bir YoneticiID'si vardır ve bu YoneticiID, başka bir çalışanın CalisanID'sine referans verir.
Şimdi, her çalışanın adını ve yöneticisinin adını listeleyelim:
JOIN Türleri ve Performans:
Doğru JOIN türünü seçmek, sorgu performansını doğrudan etkileyebilir.
`ON` ve `WHERE` Koşullarının Farkı (JOIN'larda):
Bu, sıkça karıştırılan bir konudur.
Örnek:
Özetle, JOIN koşulları için ON kullanın, sonuç kümesini filtrelemek için WHERE kullanın. Özellikle OUTER JOIN'larda bu ayrım çok önemlidir.
Sonuç:
SQL JOIN türleri, ilişkisel veritabanı yönetiminin temel taşlarındandır. INNER, LEFT, RIGHT, FULL OUTER, CROSS ve SELF JOIN gibi farklı türler, farklı veri birleştirme senaryolarına hizmet eder. Her bir JOIN türünün kendine özgü bir amacı ve çalışma prensibi vardır.
INNER JOIN (İç Birleştirme)
INNER JOIN, en sık kullanılan JOIN türüdür. İki veya daha fazla tablonun kesişim kümesindeki, yani her iki tabloda da eşleşen kayıtlardaki verileri döndürür. Eğer eşleşen bir kayıt yoksa, o kayıt sonuç kümesinde yer almaz. Genellikle, tablolardaki ortak sütunlar (örneğin, birincil anahtar ve yabancı anahtar) üzerinden birleştirme yapılır.
Sözdizimi:
Kod:
SELECT kolon1, kolon2...
FROM tablo1
INNER JOIN tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;
Örnek Senaryo:
"Müşteriler" ve "Siparişler" adında iki tablomuz olsun.
Kod:
CREATE TABLE Musteriler (
MusteriID INT PRIMARY KEY,
Ad NVARCHAR(50),
Soyad NVARCHAR(50),
Sehir NVARCHAR(50)
);
INSERT INTO Musteriler (MusteriID, Ad, Soyad, Sehir) VALUES
(1, 'Ali', 'Yılmaz', 'İstanbul'),
(2, 'Ayşe', 'Demir', 'Ankara'),
(3, 'Mehmet', 'Kara', 'İzmir'),
(4, 'Zeynep', 'Can', 'Bursa');
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
UrunAdi NVARCHAR(100),
Miktar INT,
FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID)
);
INSERT INTO Siparisler (SiparisID, MusteriID, UrunAdi, Miktar) VALUES
(101, 1, 'Laptop', 1),
(102, 2, 'Klavye', 2),
(103, 1, 'Mouse', 1),
(104, 5, 'Kulaklık', 1), -- Musteriler tablosunda 5 numaralı musteri yok
(105, 3, 'Monitör', 1);
Şimdi, sadece sipariş vermiş müşterilerin adlarını ve sipariş bilgilerini getirelim:
Kod:
SELECT
M.Ad,
M.Soyad,
S.UrunAdi,
S.Miktar
FROM
Musteriler M
INNER JOIN
Siparisler S ON M.MusteriID = S.MusteriID;
Sonuç: Sadece hem Musteriler hem de Siparisler tablosunda MusteriID'si eşleşen kayıtlar gelir. MusteriID 4 (Zeynep Can) ve SiparisID 104 (MusteriID 5) sonuçta yer almaz çünkü bunlara karşılık gelen eşleşme diğer tabloda yoktur.
LEFT JOIN (Sol Dış Birleştirme)
LEFT JOIN, sol tablodaki tüm kayıtları ve sağ tablodaki eşleşen kayıtları döndürür. Eğer sağ tabloda eşleşen bir kayıt yoksa, sol tablonun kayıtları yine de getirilir ve sağ tablonun sütunları için NULL değerleri döndürülür. `LEFT OUTER JOIN` ifadesi `LEFT JOIN` ile aynı anlama gelir ve daha az kullanılır.
Sözdizimi:
Kod:
SELECT kolon1, kolon2...
FROM tablo1
LEFT JOIN tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;
Örnek Senaryo:
Yukarıdaki "Müşteriler" ve "Siparişler" tablolarını kullanarak, tüm müşterileri ve varsa siparişlerini listeleyelim. Siparişi olmayan müşteriler de listede yer almalıdır.
Kod:
SELECT
M.Ad,
M.Soyad,
S.SiparisID,
S.UrunAdi
FROM
Musteriler M
LEFT JOIN
Siparisler S ON M.MusteriID = S.MusteriID;
Sonuç: Tüm müşteriler (Ali, Ayşe, Mehmet, Zeynep) listelenir. Ali ve Mehmet'in birden fazla siparişi olduğu için birden fazla satırda görünürler. Zeynep Can'ın siparişi olmadığı için, SiparisID ve UrunAdi sütunları NULL olarak döner.
LEFT JOIN ile eşleşmeyen kayıtları bulma:
LEFT JOIN'ın önemli bir kullanım alanı, bir tabloda olup diğerinde olmayan kayıtları bulmaktır. Örneğin, hiç sipariş vermemiş müşterileri bulmak:
Kod:
SELECT
M.Ad,
M.Soyad
FROM
Musteriler M
LEFT JOIN
Siparisler S ON M.MusteriID = S.MusteriID
WHERE
S.SiparisID IS NULL;
RIGHT JOIN (Sağ Dış Birleştirme)
RIGHT JOIN, LEFT JOIN'ın tam tersidir. Sağ tablodaki tüm kayıtları ve sol tablodaki eşleşen kayıtları döndürür. Eğer sol tabloda eşleşen bir kayıt yoksa, sağ tablonun kayıtları getirilir ve sol tablonun sütunları için NULL değerleri döndürülür. `RIGHT OUTER JOIN` ifadesi `RIGHT JOIN` ile aynı anlama gelir.
Sözdizimi:
Kod:
SELECT kolon1, kolon2...
FROM tablo1
RIGHT JOIN tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;
Örnek Senaryo:
Yukarıdaki "Müşteriler" ve "Siparişler" tablolarını kullanarak, tüm siparişleri ve varsa ilgili müşteri bilgilerini listeleyelim. Müşterisi silinmiş veya hatalı girilmiş siparişler (MusteriID'si Musteriler tablosunda olmayan) de listede yer almalıdır.
Kod:
SELECT
M.Ad,
M.Soyad,
S.SiparisID,
S.UrunAdi
FROM
Musteriler M
RIGHT JOIN
Siparisler S ON M.MusteriID = S.MusteriID;
Sonuç: Tüm siparişler (101, 102, 103, 104, 105) listelenir. 104 numaralı siparişin MusteriID'si (5) Musteriler tablosunda olmadığı için, M.Ad ve M.Soyad sütunları NULL olarak döner.
FULL OUTER JOIN (Tam Dış Birleştirme)
FULL OUTER JOIN, hem sol hem de sağ tablodaki tüm kayıtları döndürür. Eğer bir tabloda diğer tabloyla eşleşen bir kayıt yoksa, o tablonun ilgili sütunları için NULL değerleri döndürülür. Hem LEFT JOIN hem de RIGHT JOIN'ın birleşimi gibidir. Bu JOIN türü, her iki kümedeki tüm verileri görmek istediğinizde kullanışlıdır, örneğin iki tablonun eşleşen ve eşleşmeyen kayıtlarını aynı anda incelemek.
Sözdizimi:
Kod:
SELECT kolon1, kolon2...
FROM tablo1
FULL OUTER JOIN tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;
Örnek Senaryo:
Müşteriler ve Siparişler tablolarındaki tüm kayıtları, eşleşen veya eşleşmeyen tüm durumlarıyla birlikte görelim.
Kod:
SELECT
M.MusteriID,
M.Ad,
M.Soyad,
S.SiparisID,
S.UrunAdi
FROM
Musteriler M
FULL OUTER JOIN
Siparisler S ON M.MusteriID = S.MusteriID;
Sonuç:
- Eşleşen kayıtlar (MusteriID 1, 2, 3) hem Müşteri hem de Sipariş bilgileriyle gelir.
- Siparişleri olmayan müşteriler (MusteriID 4 - Zeynep Can) gelir, Sipariş sütunları NULL olur.
- Müşterisi olmayan siparişler (SiparisID 104) gelir, Müşteri sütunları NULL olur.
Not: Bazı veritabanı sistemleri (örneğin MySQL), doğrudan FULL OUTER JOIN'ı desteklemez. Bu durumda, LEFT JOIN ve RIGHT JOIN'ı UNION operatörü ile birleştirerek aynı etkiyi elde edebilirsiniz:
Kod:
SELECT
M.MusteriID,
M.Ad,
M.Soyad,
S.SiparisID,
S.UrunAdi
FROM
Musteriler M
LEFT JOIN
Siparisler S ON M.MusteriID = S.MusteriID
UNION
SELECT
M.MusteriID,
M.Ad,
M.Soyad,
S.SiparisID,
S.UrunAdi
FROM
Musteriler M
RIGHT JOIN
Siparisler S ON M.MusteriID = S.MusteriID
WHERE
M.MusteriID IS NULL;
Dikkat: UNION, varsayılan olarak tekrar eden satırları kaldırır. Eğer tekrar eden satırları dahil etmek isterseniz UNION ALL kullanabilirsiniz. Ancak FULL OUTER JOIN'ın mantığında genellikle tekrar eden satırlar olmaz, çünkü her satır bir kez eşleştirilir veya NULL ile tamamlanır.
CROSS JOIN (Kartezyen Çarpım)
CROSS JOIN, iki tablo arasındaki tüm olası kayıt kombinasyonlarını döndürür. Bir tablonun her bir satırı, diğer tablonun her bir satırı ile eşleştirilir. Bu, genellikle çok büyük sonuç kümeleriyle sonuçlanır ve çoğu zaman bilinçli olarak kullanılmaz, ancak bazı özel durumlarda (örneğin, test verisi oluşturma veya tüm olası kombinasyonları listeleme) faydalı olabilir. ON koşulu kullanılmaz.
Sözdizimi:
Kod:
SELECT kolon1, kolon2...
FROM tablo1
CROSS JOIN tablo2;
Kod:
SELECT kolon1, kolon2...
FROM tablo1, tablo2;
Örnek Senaryo:
Küçük "Renkler" ve "Boyutlar" tablolarımız olsun:
Kod:
CREATE TABLE Renkler (
RenkID INT PRIMARY KEY,
RenkAdi NVARCHAR(50)
);
INSERT INTO Renkler (RenkID, RenkAdi) VALUES
(1, 'Kırmızı'),
(2, 'Mavi'),
(3, 'Yeşil');
CREATE TABLE Boyutlar (
BoyutID INT PRIMARY KEY,
BoyutAdi NVARCHAR(50)
);
INSERT INTO Boyutlar (BoyutID, BoyutAdi) VALUES
(101, 'Küçük'),
(102, 'Orta'),
(103, 'Büyük');
Tüm olası renk-boyut kombinasyonlarını listeleyelim:
Kod:
SELECT
R.RenkAdi,
B.BoyutAdi
FROM
Renkler R
CROSS JOIN
Boyutlar B;
Sonuç: Her renk, her boyutla eşleşerek 3 (renk) * 3 (boyut) = 9 satırlık bir sonuç kümesi döndürür.
- Kırmızı, Küçük
- Kırmızı, Orta
- Kırmızı, Büyük
- Mavi, Küçük
- Mavi, Orta
- Mavi, Büyük
- Yeşil, Küçük
- Yeşil, Orta
- Yeşil, Büyük
SELF JOIN (Kendi Kendine Birleştirme)
SELF JOIN, bir tablonun kendi kendisiyle birleştirilmesi işlemidir. Bu, aynı tablodaki satırlar arasında ilişkiler bulmak istediğinizde kullanışlıdır. Örneğin, bir "Çalışanlar" tablosunda çalışanların yöneticilerini (ki onlar da aynı tabloda birer çalışandır) bulmak için kullanılabilir. SELF JOIN'da, tablonun farklı örneklerini oluşturmak için takma adlar (alias) kullanmak zorunludur, aksi takdirde sorgu belirsiz olur.
Sözdizimi (genellikle INNER JOIN veya LEFT JOIN ile kullanılır):
Kod:
SELECT a.kolon1, b.kolon2...
FROM tablo_adi a
JOIN tablo_adi b ON a.ortak_kolon = b.ortak_kolon;
Örnek Senaryo:
Bir "Çalışanlar" tablomuz olsun, burada her çalışanın bir YoneticiID'si vardır ve bu YoneticiID, başka bir çalışanın CalisanID'sine referans verir.
Kod:
CREATE TABLE Calisanlar (
CalisanID INT PRIMARY KEY,
Ad NVARCHAR(50),
Soyad NVARCHAR(50),
YoneticiID INT -- Bu, CalisanID'ye referans eder
);
INSERT INTO Calisanlar (CalisanID, Ad, Soyad, YoneticiID) VALUES
(1, 'Ayşe', 'Yılmaz', NULL), -- CEO, yöneticisi yok
(2, 'Can', 'Demir', 1),
(3, 'Elif', 'Kara', 1),
(4, 'Mert', 'Ak', 2),
(5, 'Deniz', 'Çelik', 2);
Şimdi, her çalışanın adını ve yöneticisinin adını listeleyelim:
Kod:
SELECT
C.Ad + ' ' + C.Soyad AS CalisanAdiSoyadi,
Y.Ad + ' ' + Y.Soyad AS YoneticiAdiSoyadi
FROM
Calisanlar C
LEFT JOIN
Calisanlar Y ON C.YoneticiID = Y.CalisanID;
Sonuç: Ayşe Yılmaz'ın yöneticisi olmadığı için (YoneticiID NULL), onun yöneticisi NULL olarak döner. Diğer çalışanlar için, yöneticilerinin adları ve soyadları gelir.
JOIN Türleri ve Performans:
Doğru JOIN türünü seçmek, sorgu performansını doğrudan etkileyebilir.
- INNER JOIN genellikle en performanslı JOIN'dır çünkü en küçük sonuç kümesini döndürür (sadece eşleşenler).
- OUTER JOIN'lar (LEFT, RIGHT, FULL) daha büyük sonuç kümeleri döndürebilir ve sorgu iyileştiricinin (optimizer) daha fazla iş yapmasını gerektirebilir. Ancak, modern veritabanı sistemleri bu tür sorguları oldukça verimli bir şekilde işleyebilir.
- CROSS JOIN çok dikkatli kullanılmalıdır. Özellikle büyük tablolarda, sonuç kümesi katlanarak büyür ve veritabanı sunucusunu aşırı yükleyebilir, hatta servis dışı bırakabilir.
- Performansı artırmak için, JOIN koşullarında kullanılan sütunlarda indeksler kullanmak hayati öneme sahiptir. Özellikle birincil ve yabancı anahtarlar üzerindeki indeksler, JOIN işlemlerinin hızını büyük ölçüde artırır.
- WHERE koşullarını doğru yerleştirmek de önemlidir. JOIN'dan önce filtreleme yapmak (alt sorgular veya Common Table Expressions - CTE'ler ile) çoğu zaman performansı artırabilir, çünkü JOIN edilecek veri miktarını azaltır.
`ON` ve `WHERE` Koşullarının Farkı (JOIN'larda):
Bu, sıkça karıştırılan bir konudur.
- ON Koşulu: Birleştirme işleminin nasıl yapılacağını, yani hangi sütunlar üzerinden tabloların eşleştirileceğini tanımlar. JOIN işleminden önce uygulanır. Özellikle OUTER JOIN'larda kritik öneme sahiptir.
- WHERE Koşulu: Birleştirme işlemi tamamlandıktan sonra, sonuç kümesi üzerinde filtreleme yapar.
Örnek:
Kod:
-- Yanlış Kullanım (LEFT JOIN'da):
SELECT M.Ad, S.UrunAdi
FROM Musteriler M
LEFT JOIN Siparisler S ON M.MusteriID = S.MusteriID
WHERE S.UrunAdi = 'Laptop';
Bu sorgu, LEFT JOIN'ın amacını bozar. S.UrunAdi 'Laptop' olmayan tüm LEFT JOIN satırlarını (örneğin siparişi olmayan müşteriler) WHERE koşulu ile eleyecektir. Bu, aslında bir INNER JOIN gibi davranmasına neden olur.
Kod:
-- Doğru Kullanım (LEFT JOIN'da spesifik koşulla):
SELECT M.Ad, S.UrunAdi
FROM Musteriler M
LEFT JOIN Siparisler S ON M.MusteriID = S.MusteriID AND S.UrunAdi = 'Laptop';
Bu sorgu, ON koşulunu kullanarak sadece 'Laptop' siparişlerini birleştirir. Eğer bir müşteri 'Laptop' siparişi vermediyse, yine de sonuçta görünür ve Sipariş sütunları NULL olur. Bu, LEFT JOIN'ın doğru kullanımıdır.
Özetle, JOIN koşulları için ON kullanın, sonuç kümesini filtrelemek için WHERE kullanın. Özellikle OUTER JOIN'larda bu ayrım çok önemlidir.
Sonuç:
SQL JOIN türleri, ilişkisel veritabanı yönetiminin temel taşlarındandır. INNER, LEFT, RIGHT, FULL OUTER, CROSS ve SELF JOIN gibi farklı türler, farklı veri birleştirme senaryolarına hizmet eder. Her bir JOIN türünün kendine özgü bir amacı ve çalışma prensibi vardır.
- INNER JOIN: Sadece eşleşen kayıtları getirir, en sık kullanılanıdır.
- LEFT JOIN: Sol tablonun tüm kayıtlarını ve sağ tablonun eşleşen kayıtlarını getirir. Eşleşmeyenler için sağ tarafa NULL ekler.
- RIGHT JOIN: Sağ tablonun tüm kayıtlarını ve sol tablonun eşleşen kayıtlarını getirir. Eşleşmeyenler için sol tarafa NULL ekler.
- FULL OUTER JOIN: Her iki tablonun da tüm kayıtlarını getirir, eşleşmeyenler için NULL ekler.
- CROSS JOIN: Tüm olası kayıt kombinasyonlarını (kartezyen çarpım) getirir. Genellikle bilinçli olarak kullanılmaz, büyük sonuç kümeleriyle sonuçlanabilir.
- SELF JOIN: Bir tablonun kendi kendisiyle birleştirilmesi, aynı tablodaki satırlar arası ilişkileri bulmak için kullanılır.