Bazı Sql sorgularında kimi alanların null değer döndürürdüğünü biliyoruz.Örneğin
select urunid,urun_adi,fiyat from STOK sorgusunda fiyat alanı null değer almışsa yukarıda ki sorguda null döndürecektir.
Sorgu sonucunda null değerlerle karşılaşmamak istemiyorsak sorguyu ;
select UrunId,UrunAdi,ISNULL(Fiyat,0) from STOK olarak değiştirebiliriz.
ISNULL komutunun yazımı :
ISNULL ( kontrol_edilecek_ifade , null_yerine_konacak değer)
Örnek : select ISNULL(Sum(Fiyat),0) from STOK => Fiyat sutununda null olarak dönen değerleri 0 ile değiştirir.
SQL COALESCE
Kullanım amacı ISNULL komutu ile hemen hemen aynıdır.Yalnız ISNULL komutu ANSI standart komutu değildir.Ben genelde Access veya SQL Server üzerinde sorgularda ISNULL komutunu kullanıyorum.
COALESCE kullanıma gelince yukardaki aynı sorgu cümleciğini kullanarak;
select UrunId,UrunAdi,COALESCE(Fiyat,0) olarak kullanabiliriz.
COALESCE fonksiyonuna parametre olarak verdiğiniz ifadeleri birbiriyle kıyaslar,hangisi null değilse onu döndürür.
COALESCE komutunun yazımı : COALESCE(parametre1,parametre2,.....parametre[n])
Gelelim aralarındaki farklara:
- COALESCE komutunun yazması,hatırlaması ve telafuzu çok zor.ISNULL komutu ise bu konuda epey avantajlı.
- COALESCE ANSI-SQL uyumludur.Hemen hemen tüm veritabanlarında sorgulama yaptırabilirsiniz.ISNULL komutu ise T-SQL uyumlu.Yani Microsoft orijinli (Access,SQL Server) veritablarında kullanabilirsiniz ama örneğin Firebird 'de denenerseniz bu komut tanınamaz.
- ISNULL mutlaka iki parametre ile kullanılır.Birden fazla parametre ile kullanmak isterseniz iç içe(nested) kullanmak durumundayız.COALESCE bu yönden epey işe yarar.İkiden fazla parametreyi kullanabiliriz.Bu söylediklerimizi komut dökersek;
SELECT COALESCE(NULL, NULL, 'fe')==> fe değerini döndürür.(İkiden fazla parametre)
SELECT ISNULL(NULL, NULL, 'fe') ==>hata meydana gelir.Çünkü mutlaka iki parametre kullanmak durumundayız.
Bu hatayla karşılaşmamak için komutu iç içe (nested) kullanacağız;
SELECT ISNULL(NULL, ISNULL(NULL, 'fe')) ==>fe değeri döner.