SQL JOIN türlerinin karşılaştırması: inner, outer, cross, self, lateral, natural — her birinin ne döndürdüğü ve tek satırlık bir örnek.
Join'ler iki tablonun satırlarını ortak bir anahtar üzerinden birleştirir. Anahtarlar eşleştiğinde, eşleşmediğinde veya tekrarlandığında hangi satırların ayakta kalacağını join türü belirler.
Referans tablosu · 8 kayıt
SQL Join'leriExplained
8 of 8 rows
İç ve dış
Yalnızca ON koşulunun her iki tabloda da eşleştiği satırlar. Eşleşmeyen satırlar iki taraftan da düşürülür.
SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Sol tablodaki tüm satırlar. Eşleşme olmayan yerlerde sağdaki sütunlar NULL olur.
SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Sağ tablodaki tüm satırlar. Eşleşme olmayan yerlerde soldaki sütunlar NULL olur.
SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Her iki tablodaki tüm satırlar. Eşleşmeyen taraflar NULL ile doldurulur.
SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Çapraz ve öz
Kartezyen çarpım. Her sol satır her sağ satırla eşleşir. ON koşulu yoktur.
SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Bir tablonun alias'lar aracılığıyla kendisiyle birleştirilmesi. Tek tablo içindeki satırları karşılaştırır.
SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Gelişmiş
FROM içindeki, dış satır başına bir kez değerlendirilen bir alt sorgu. Alt sorgu dış tablonun sütunlarına başvurabilir.
SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Aynı adı paylaşan sütunlar üzerinden birleştirir. ON koşulu yoktur. İstenmeyen anahtar çakışmalarına dikkat edin.
SELECT u.name, o.total FROM users u NATURAL JOIN orders o;