SQL EXISTS vs JOIN: Sipariş Vermiş Müşterileri Bulma – webdedik gönderisi

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.name
2FROM customers c
3WHERE EXISTS (
4SELECT 1
5FROM orders o
6WHERE o.cust_id = c.cust_id
7);

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.name
2FROM customers c
3INNER 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.

konu hakkında tepkinizi verebilirsiniz