İlişkiler ve JOIN
EXISTS ve NOT EXISTS
Verinin kendisinden önce varlığıyla ilgilen.
Kavramı anlayalım
EXISTS alt sorgu en az bir satır üretiyorsa TRUE olur. Seçilen değerin kendisi değil satırın varlığı önemlidir; SELECT 1 yaygın bir anlatım kalıbıdır. NOT EXISTS eşleşen satır bulunmadığını sınar.
Bir müşterinin sipariş verip vermediğini öğrenmek için JOIN ile satırları çoğaltıp DISTINCT kullanmak yerine EXISTS iş niyetini daha net anlatır. NOT EXISTS, NOT IN alt sorgusundaki NULL tuzağından ayrılır. Performans için tek bir kalıbı her zaman daha hızlı ilan etme; plan, indeks ve veri dağılımına bak.
Varlık, yokluk, satılmayan ürün ve eksik ilişki kontrollerinde.
EXISTS içinde SELECT edilen değerin filtre sonucunu belirlediğini sanmak.
Aynı konu. Üç farklı derinlik.
SELECT c.FullName FROM lab.Customer AS c WHERE EXISTS (SELECT 1 FROM lab.SalesOrder AS o WHERE o.CustomerId = c.CustomerId);Sipariş vermiş beş müşteri bulunur; müşteri tekrar etmez.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Hiç sipariş vermeyen müşterileri NOT EXISTS ile bul.
Çözümü ve açıklamasını göster
SELECT c.FullName FROM lab.Customer AS c WHERE NOT EXISTS (SELECT 1 FROM lab.SalesOrder AS o WHERE o.CustomerId = c.CustomerId);Selin. Alt sorgudaki SELECT listesi satır varlığını değiştirmez.