SQL'de NULL değeri "bilinmeyen" veya "mevcut olmayan" değer anlamına gelir. Davranışı özeldir:
NULL ile herhangi bir değer = veya <> ile karşılaştırıldığında her zaman UNKNOWN sonucu verir, TRUE veya FALSE değil.NULL varlığını kontrol etmek için IS NULL veya IS NOT NULL kullanılmalıdır.NULL ile yapılan herhangi bir aritmetik veya mantıksal işlem NULL verir.Örnek:
SELECT * FROM users WHERE name = NULL; -- hiçbir satır döndürmeyecek SELECT * FROM users WHERE name IS NULL; -- doğru SELECT 1 + NULL; -- Sonuç: NULL
NULL değerini değiştirmek için COALESCE(foo, 0) (ilk ânı NULL olmayan değeri alır) veya SQL Server'da ISNULL(foo, 'default') gibi fonksiyonlar kullanılır.
Soru: WHERE some_column <> 'value' koşulu some_column NULL olan satırlarda ne sonuç verecek?
Cevap:
Bu satırlarda koşul sağlanmayacak: NULL ile karşılaştırma UNKNOWN verecek, TRUE değil. Bu nedenle NULL olan satırlar seçim kümesine dahil edilmeyecek.
Örnek:
-- some_column | ... -- NULL | ... -- 'abc' | ... -- 'value' | ... SELECT * FROM table WHERE some_column <> 'value'; -- NULL olan satır dahil edilmeyecek
Hikaye
WHERE status <> 'closed' koşulu, status = NULL olan hesapları yanlışlıkla göz ardı etti (örneğin, yeni başvurular). Sonuçta, aktif hesaplar yanlış sayıldı - sayı %15 daha az oldu.Hikaye
COALESCE(user_name, 'Sayın Müşteri') mevcut değeri eklemeyi unuttular. Yaklaşık bin müşteri, isimsiz selamlar aldı ve bu durumu otomasyon hatası olarak algıladı.Hikaye
Veritabanı göçü sırasında LEFT JOIN, beklenenden fazla satır döndürdü. Görüldü ki, sol tabloda NULL olan alanlar vardı; WHERE b.field = 'X' gibi filtreler JOIN'den sonra bu satırları atmış, dolayısıyla bazı veriler kaybolmuştu.