SQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)
INNER, LEFT, RIGHT, FULL, CROSS ve SELF JOIN’i iki küçük tablo, net sorgular ve tam sonuçlarla öğrenin.
- INNER JOIN: yalnızca iki tabloda da eşleşen satırlar.
- LEFT JOIN: soldaki tüm satırlar ve eşleşenler (yoksa NULL).
- RIGHT JOIN: sağdaki tüm satırlar ve eşleşenler.
- FULL JOIN: iki tablonun tüm satırları, mümkün olduğunda eşleştirilmiş.
- Anahtarlar üzerinden birleştirin, tablo takma adları kullanın ve join sütunlarını indeksleyin.
Gerçek veritabanları her şeyi tek tabloda tutmaz. Müşteriler bir tabloda, siparişler başka bir tablodadır. “Bu ay hangi müşteriler sipariş verdi?” sorusunu yanıtlamak için ikisini birleştirmek gerekir; SQL JOIN tam olarak bunu yapar.
Bu rehber uygulamalıdır. JOIN’ler yeni başlayanları şaşırtır, çünkü aynı iki tablo join türüne göre farklı sonuçlar verir. Küçük ve somut verilerle bakınca kolaylaşır.
SQL JOIN açıklaması: örnek tablolar
customers
| id | name |
|---|---|
| 1 | Asha |
| 2 | Ben |
| 3 | Chitra |
orders
| id | customer_id | total |
|---|---|---|
| 101 | 1 | 250 |
| 102 | 1 | 120 |
| 103 | 2 | 90 |
| 104 | 9 | 40 |
Chitra’nın siparişi yok ve 104 numaralı sipariş var olmayan bir müşteriyi (9) gösteriyor. Bu iki uç durum, join türleri arasındaki farkı gösterir.
INNER JOIN
INNER JOIN yalnızca koşulun iki tabloda da sağlandığı satırları döndürür. Eşi olmayan satırlar elenir.
SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
Sonuç: Asha (101), Asha (102), Ben (103). Chitra ve 104 numaralı sipariş yok. Yalnızca ilişkili veriyi istediğinizde, örneğin müşteri ayrıntılarıyla siparişlerde kullanın. Yalnızca JOIN yazmak INNER JOIN anlamına gelir.
LEFT JOIN
LEFT JOIN soldaki tablonun tüm satırlarını korur ve sağdan eşleşenleri ekler. Eşleşme yoksa sağdaki sütunlar NULL olur.
SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
Sonuç: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL). Artık Chitra görünüyor.
Hızlı ipucu: hiç sipariş vermemiş müşterileri bulmak için sağ taraftaki NULL’u filtreleyin: WHERE o.id IS NULL Chitra’yı döndürür. Test uzmanları bunu yetim veya eksik kayıtları bulmak için kullanır.
RIGHT JOIN ve FULL JOIN
RIGHT JOIN, LEFT JOIN’in aynadaki görüntüsüdür ve sağdaki tüm satırları korur. Çoğu kişi okuması daha doğal olduğu için tabloların sırasını değiştirip LEFT JOIN kullanır.
SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;
Sonuç, müşteri adı NULL olan 104 numaralı siparişi içerir. FULL (OUTER) JOIN iki tablonun tüm satırlarını döndürür: siparişi olmayan Chitra ve müşterisi olmayan 104 numaralı sipariş.
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;
PostgreSQL ve SQL Server destekler. MySQL desteklemez; LEFT JOIN ile RIGHT JOIN’i UNION ile birleştirin. Daha fazlası için PostgreSQL kılavuzunda net bir join eğitimi var.
| Join | Yalnızca sol satırlar | Yalnızca sağ satırlar | Eşleşen satırlar |
|---|---|---|---|
| INNER | Hayır | Hayır | Evet |
| LEFT | Evet | Hayır | Evet |
| RIGHT | Hayır | Evet | Evet |
| FULL | Evet | Evet | Evet |
CROSS JOIN ve SELF JOIN
CROSS JOIN bir tablodaki her satırı diğer tablodaki her satırla eşler: üç müşteri ve dört sipariş on iki satır verir. Nadir kullanılır ama kombinasyon üretmek için işe yarar; örneğin her beden ve renk için test verisi.
SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;
SELF JOIN, bir tabloyu takma adlarla kendisiyle birleştirir; örneğin her çalışanın yöneticisini bulmak için.
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
SQL JOIN: yaygın hatalar ve performans ipuçları
- ON koşulunu unutmak istemeden CROSS JOIN oluşturur ve satır sayısını patlatır.
- LEFT JOIN sonrası sağ tabloyu WHERE’de filtrelemek onu INNER JOIN’e çevirir; koşulu ON’a koyun.
- Belirsiz sütun adları: sütunların başına tablo takma adını ekleyin.
- Benzersiz olmayan sütunlarda join satırları çoğaltır ve toplamları şişirir.
- Join sütunlarını indeksleyin, yalnızca gerekli sütunları seçin ve yavaş sorguları
EXPLAINile inceleyin.
JOIN’ler test uzmanları için neden önemli
QA mühendisleri, arayüz veya API üzerinden oluşturulan verinin veritabanına doğru ulaştığını doğrulamak ve yetim kayıtları bulmak için join kullanır. Postman ile API testi rehberimizle (İngilizce) birlikte okuyun. Temeller için yeni başlayanlar için SQL eğitimi (İngilizce), yeni veri depoları için vektör veritabanları (İngilizce) yazısına bakın. Veritabanını yerelde çalıştırmak için Docker eğitimimize (İngilizce) göz atın.
Son sözler
SQL JOIN tek satırda: INNER yalnızca eşleşenleri tutar, LEFT soldaki her şeyi, RIGHT sağdaki her şeyi, FULL ise hepsini tutar. Sorguyu çalıştırmadan sonucu tahmin edene kadar iki küçük tabloyla pratik yapın; sonra üç tabloyu birleştirin ve join’leri GROUP BY ile birlikte kullanın.
Sık sorulan sorular
INNER JOIN ile LEFT JOIN arasındaki fark nedir?
INNER JOIN yalnızca iki tabloda da eşleşen satırları döndürür. LEFT JOIN soldaki tablonun tüm satırlarını döndürür ve eşleşmeyen sağ sütunları NULL ile doldurur.
En hızlı SQL JOIN hangisi?
Her zaman en hızlı olan bir tür yoktur. Performans indekslere, tablo boyutuna ve yürütme planına bağlıdır. Join sütunlarını indeksleyin ve planı kontrol edin.
MySQL FULL OUTER JOIN’i destekler mi?
Hayır. MySQL’de aynı sonucu almak için LEFT JOIN ve RIGHT JOIN’i UNION ile birleştirin.
SELF JOIN ne için kullanılır?
SELF JOIN aynı tablodaki satırları karşılaştırır; örneğin tek bir employees tablosunda her çalışanın yöneticisini bulmak için.
Join’im neden yinelenen satırlar döndürüyor?
Join sütunu tablolardan birinde benzersiz olmadığında yinelenenler oluşur. Anahtarlarınızı kontrol edin veya join’den önce veriyi toplulaştırın.
Öğrenmeye devam edin (İngilizce yazılar)
Test, WordPress veya SEO konusunda yardıma mı ihtiyacınız var?
Ekiplerin daha iyi yazılım yayınlamasına ve sitelerini büyütmesine yardımcı oluyoruz. Ne üzerinde çalıştığınızı söyleyin, bir sonraki adımı önerelim.
Daha fazla kılavuz test, yapay zeka ve modern geliştirme
Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.
