COMPUTER ENGINEER

Örneklere git
Blog
SQL Server / T-SQL6 dk çalışma
07/ 65

Veritabanı temelleri

NULL ve üç değerli mantık

Bilinmeyen, boş metin ve sıfır birbirinden farklıdır.

AnlaÖrneği inceleKendin uygula

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.

NERESİNDE KULLANIRSIN?

Eksik alanları filtrelerken, sayarken, doldururken veya bir ilişkinin yokluğunu ararken.

SIK YAPILAN HATA

= NULL kullanmak ve NOT IN listesindeki NULL etkisini unutmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

T-SQL / SQL Server 2019+
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.

02 / SIRA SENDE

Ö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
Açıklamalı çözüm
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.