Veritabanı temelleri
NULL ve üç değerli mantık
Bilinmeyen, boş metin ve sıfır birbirinden farklıdır.
Kavramı anlayalım
NULL bir bilgi eksikliği durumudur; sıfır veya boş metin değildir. Karşılaştırmalarda TRUE ve FALSE yanında UNKNOWN ortaya çıkabilir. WHERE sadece TRUE olan satırları geçirir. Bu nedenle Email = NULL yazmak beklediğin eksik e-postaları bulmaz; IS NULL kullanmalısın.
NULL içeren aritmetik genellikle NULL üretir. COALESCE ilk NULL olmayan değeri seçer; bu bir iş kararıdır. Bilinmeyen bir fiyatı sıfır yapmak yanlış bir satış toplamı üretebilir. COUNT(*) tüm satırları, COUNT(Email) NULL olmayan e-postaları sayar. Çoğu aggregate NULL girdileri yok sayar.
NOT IN alt sorgusunun NULL döndürmesi önemli bir tuzaktır: karşılaştırma UNKNOWN’a dönüşüp beklenen satırları elemek mümkündür. İlişkili NOT EXISTS çoğu yokluk kontrolünü daha açık ifade eder. NULL davranışını her filtrenin iş anlamıyla birlikte düşün; “veri yok” ile “olay hiç yaşanmadı” aynı değildir.
Eksik alanları filtrelerken, sayarken, doldururken veya bir ilişkinin yokluğunu ararken.
= NULL kullanmak ve NOT IN listesindeki NULL etkisini unutmak.
Aynı konu. Üç farklı derinlik.
SELECT CustomerId, FullName FROM lab.Customer WHERE Email IS NULL ORDER BY CustomerId;Can ve Mert bulunur. Boş metni olan bir kayıt bu koşulla bulunmaz.
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.
Eksik e-postayı kullanıcıya açıklayıcı metinle göster; kaydı değiştirme.
Çözümü ve açıklamasını göster
SELECT FullName, COALESCE(Email, N'Not provided') AS DisplayEmail FROM lab.Customer;COALESCE sadece sonuç görünümünü değiştirir; UPDATE yapmaz.