NULL sıfır değildir, boş metin değildir
NULL “değer yok / bilinmiyor” demektir. Bazı müşterilerimizin şehri veya e-postası bilinmiyor; bu hücrelerde NULL var.
NULL'ı = ile arayamazsın
NULL ile yapılan her karşılaştırma bilinmeyen (UNKNOWN) sonucunu verir, doğru değil. Bu yüzden şu sorgu hiçbir satır döndürmez:
SELECT * FROM customers WHERE email = NULL; -- yanlış!
Doğrusu:
SELECT first_name, last_name, email FROM customers WHERE email IS NULL;
Tersi için IS NOT NULL.
Üç değerli mantık
SQL'de bir koşul DOĞRU, YANLIŞ veya BİLİNMEYEN olabilir. WHERE sadece DOĞRU olan satırları alır.
| İfade | Sonuç |
|---|---|
NULL = NULL | BİLİNMEYEN |
NULL <> 5 | BİLİNMEYEN |
5 + NULL | NULL |
TRUE OR NULL | DOĞRU |
FALSE AND NULL | YANLIŞ |
Klasik hata
WHERE city <> 'İstanbul' şehri NULL olan müşterileri getirmez. Onları da istiyorsan: WHERE city <> 'İstanbul' OR city IS NULL.Derinleş: NULL nerelerde karşına çıkar?
| Durum | Örnek | Doğru yazım |
|---|---|---|
| Henüz olmamış olay | İptal edilen siparişin delivered_at değeri | delivered_at IS NULL |
| Bilinmeyen bilgi | Müşterinin ilçesi | COALESCE(district, 'Belirtilmemiş') |
| Uygulanamaz | Vadesiz hesabın kredi limiti | Ortalamada payda dikkat: AVG boşları atlar |
SELECT COUNT(*) AS toplam,
COUNT(courier_id) AS kuryeli,
COUNT(*) - COUNT(courier_id) AS kuryesiz
FROM lk_orders;
Raporda bir oran hesaplarken paydanın boşları içerip içermediğini her zaman açıkça söyle.