RIGHT JOIN
LEFT JOIN'in aynasıdır: sağ tablonun tüm satırlarını korur. Pratikte tablo sırasını değiştirip LEFT JOIN yazmak daha okunaklı olduğu için az kullanılır.
SELECT e.first_name, d.name FROM employees e RIGHT JOIN departments d ON e.dept_id = d.dept_id;
FULL OUTER JOIN
Her iki tablonun da tüm satırlarını döndürür; eşi olmayan taraf NULL olur. İki kaynağı karşılaştırırken (“hangi kayıt sadece birinde var?”) çok kullanışlıdır.
SELECT e.first_name, e.dept_id AS calisan_dept, d.name AS departman FROM employees e FULL OUTER JOIN departments d ON e.dept_id = d.dept_id WHERE e.emp_id IS NULL OR d.dept_id IS NULL;
Bu sorgu hem departmanı olmayan çalışanı (genel müdür) hem de çalışanı olmayan departmanı (Hukuk) gösterir.
Özet
| JOIN | Sol tablonun eşsizleri | Sağ tablonun eşsizleri |
|---|---|---|
| INNER | Yok | Yok |
| LEFT | Var | Yok |
| RIGHT | Yok | Var |
| FULL | Var | Var |
Derinleş: iki listeyi karşılaştırmak
FULL OUTER JOIN'in en yaygın kullanımı iki kaynağın uzlaştırılmasıdır: “hangi şehirde restoran var ama kurye yok?”
WITH r AS (SELECT city, COUNT(*) AS n FROM lk_restaurants GROUP BY city),
k AS (SELECT city, COUNT(*) AS n FROM lk_couriers GROUP BY city)
SELECT COALESCE(r.city, k.city) AS sehir, r.n AS restoran, k.n AS kurye
FROM r FULL OUTER JOIN k ON k.city = r.city;
Önce her iki tarafı aynı grain düzeyinde (şehir) özetle, sonra birleştir. Özetlemeden birleştirmek satırları çarpar.