SQL EXISTS vs JOIN: Sipariş Vermiş Müşterileri Bulma
Müşteri ve sipariş tablolarında çalışırken sık karşılaşılan bir sorun: "Hangi müşteriler en az bir sipariş verdi?" sorusuna cevap vermek. İki yöntem var: EXISTS ve JOIN. Hangisini seçmeli?
Örnek tablolarımız şöyle:
customers tablosu: cust_id (101, 102, 103, 104), name (Amit, Neha, Rahul, Priya), city
orders tablosu: order_id, cust_id (101, 101, 103, 103), amount
Amit ve Rahul'un birer sipariş var, Neha ve Priya'nın yok.
EXISTS yöntemi ile sorgu yazarsan:
1SELECT c.cust_id, c.name2FROM customers c3WHERE EXISTS (4SELECT 15FROM orders o6WHERE o.cust_id = c.cust_id7);Sonuç: Amit ve Rahul döner.
EXISTS nasıl çalışır? Veritabanı her müşteri için orders tablosunda eşleşme arar. Eşleşme bulursa TRUE döner, sorguya dahil eder. Bulmazsa FALSE döner, atlar. Önemli nokta: EXISTS sadece varlığı kontrol eder, kaç satır olduğu umurunda değil.
JOIN ile aynı sonuç:
1SELECT DISTINCT c.cust_id, c.name2FROM customers c3INNER JOIN orders o ON c.cust_id = o.cust_id;İkisinin farkı performansta yatıyor. EXISTS genellikle daha hızlıdır çünkü ilk eşleşmede durur. JOIN ise tüm satırları birleştirir, sonra DISTINCT ile tekrarları temizler. Büyük tablolarda EXISTS'in avantajı belirgindir.
Hangi birini seçmeli? Basit bir varlık kontrolü için EXISTS tercih et. Müşteri bilgilerinin yanında sipariş detaylarına ihtiyacın varsa JOIN kullan. Detaylı karşılaştırmayı burada bulabilirsin.
0 yorum