Ana içeriğe geç
Kesit SQL
Orta · Tabloları Birleştirme

RIGHT JOIN, FULL OUTER JOIN

Sağ tabloyu korumak ve iki tarafı da korumak.

Uygulamada aç, 7 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

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.

DestekSQL Server, PostgreSQL, Oracle ve SQLite (3.39+) FULL OUTER JOIN destekler. MySQL desteklemez; orada LEFT JOIN ile RIGHT JOIN sonuçları UNION ile birleştirilir. MySQL sekmesine geçip yazımı gör.

Özet

JOINSol tablonun eşsizleriSağ tablonun eşsizleri
INNERYokYok
LEFTVarYok
RIGHTYokVar
FULLVarVar

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.

Alıştırmalara geç (7)