ProgramlamaSQL geliştirici

NULL işleme SQL'de nasıl çalışır? Beklenmeyen NULL değerlerinin tehlikeleri nelerdir, onlarla nasıl doğru çalışılır ve hangi tipik hatalarla karşılaşılır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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.

Kandırmaca soru.

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

Bir bankanın raporunda 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

Bir e-posta kişiselleştirme hizmetinde 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.