- NULL nedir, sıfır ya da boş metinden farkı ne?
- IS NULL ve IS NOT NULL ile kontrol
- COALESCE ile varsayılan değer verme
- NULLIF: sıfıra bölme ve istenmeyen değerleri NULL yapma
- Toplama, sayma, JOIN ve sıralamada NULL
- Tasarımda NULL: NOT NULL ve varsayılan değerler
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
SQL'de NULL yönetimi: IS NULL, COALESCE ve NULL tuzakları
SQL'de NULL'un anlamı, IS NULL ile kontrol, COALESCE ile varsayılan değer, toplama ve JOIN'de NULL davranışı ve sık yapılan hatalar örneklerle.
NULL nedir, sıfır ya da boş metinden farkı ne?
SQL'de NULL, "değer bilinmiyor" ya da "değer yok" anlamına gelir. Sıfır bir sayıdır, boş metin uzunluğu sıfır olan bir metindir; NULL ise bunların hiçbiri değildir. Bir müşterinin telefon alanı NULL ise numarasının olmadığını ya da bilinmediğini söyleriz; boş metin ise bilinçli olarak boş bırakıldığını ifade edebilir. Bu fark rapor sonuçlarını doğrudan etkiler.
NULL'ın en önemli özelliği, karşılaştırmalarda bilinmeyen sonuç üretmesidir. SQL mantığı doğru ve yanlışın yanında bir de bilinmiyor durumunu kullanır. NULL ile yapılan hemen her karşılaştırma bilinmiyor sonucu verir ve WHERE filtresi yalnızca doğru olan satırları getirdiğinden bu satırlar sessizce dışarıda kalır. Hata mesajı yoktur; sonuçlar sadece eksik olur.
NULL kaynaklı hatalar genellikle bu sessizlikten doğar. Raporun toplamı beklenenden küçük çıkar ya da bir filtre bazı müşterileri kaçırır, ama sorgu çalışmaya devam eder. Bu yüzden NULL davranışını bilmek, güvenilir SQL yazmanın temel şartlarındandır.
IS NULL ve IS NOT NULL ile kontrol
NULL kontrolü için eşittir işareti kullanılamaz. WHERE telefon = NULL ifadesi hiçbir satırı döndürmez, çünkü NULL ile eşitlik karşılaştırması her zaman bilinmiyor sonucunu verir. Doğru yazım WHERE telefon IS NULL ya da tersi için IS NOT NULL biçimindedir.
Bu kontrol veri kalitesi analizlerinin başlangıç adımıdır. Hangi sütunlarda ne kadar eksik değer olduğunu görmek için sütun bazında NULL sayıları alınır. Örneğin müşteri tablosunda e-posta alanı boş olanlar, kampanya erişiminin neden düşük kaldığını açıklayabilir.
Karşılaştırma operatörleriyle de benzer tuzak vardır. WHERE durum <> 'İptal' koşulu, durumu NULL olan satırları getirmez; çünkü NULL ile eşit değildir karşılaştırması da bilinmiyor sonucunu verir. İptal olmayan tüm kayıtlar isteniyorsa koşul, NULL olanları da kapsayacak biçimde OR durum IS NULL ile genişletilmelidir. Bu, raporlarda en sık görülen NULL hatalarından biridir.
COALESCE ile varsayılan değer verme
COALESCE, verilen argümanları soldan sağa kontrol edip NULL olmayan en soldaki değeri döndürür. Tipik kullanım, NULL yerine anlamlı bir varsayılan koymaktır: COALESCE(telefon, 'Belirtilmemiş') ya da toplama girmeden önce eksik tutarı sıfıra çevirmek gibi. COALESCE standart SQL'dir ve SQL Server, MySQL, PostgreSQL gibi sistemlerin hepsinde çalışır.
Birden çok alternatif içeren zincirler de kurulabilir. Bir müşterinin iletişim bilgisi için önce cep telefonu, yoksa iş telefonu, yoksa e-posta kullanılmak isteniyorsa tüm bu sütunlar COALESCE içine sırayla yazılır. Dolu olan en soldaki değer sonuca gelir.
Sistemlere özgü benzer fonksiyonlar da vardır: SQL Server'da ISNULL, MySQL'de IFNULL yalnızca bir değer ve bir yedek değer alır. Taşınabilirlik istiyorsanız COALESCE tercih edilir. Küçük bir fark: ISNULL sonucun veri türünü baştaki argümandan alırken COALESCE tüm argümanlara bakar; veri türü uyumsuzluklarında farklı davranabilirler.
Varsayılan değer vermek veriyi gerçek hale getirmek anlamına gelmez; NULL yerine sıfır yazmak bazen analizi bozar. Bir ölçüm eksikse sıfır demek, ölçülmüş ve sıfır çıkmış demektir. Bu karar iş anlamına göre verilmelidir.
NULLIF: sıfıra bölme ve istenmeyen değerleri NULL yapma
NULLIF verilen değerleri karşılaştırır, eşitse NULL, değilse karşılaştırılan değeri aynen döndürür. En yaygın kullanımı sıfıra bölme hatasını önlemektir: böleni sıfır olduğunda NULL'a çeviren NULLIF ile bölme yapıldığında sorgu hata vermez, sonuç NULL olur. Oran hesaplarında (dönüşüm oranı, iade oranı gibi) bu desen sürekli kullanılır.
Bir başka kullanım, veri temizliğidir. Bazı sistemlerde eksik veri boş metin ya da bilinmiyor gibi yer tutucularla girilmiş olabilir. NULLIF ile bu değerler gerçek NULL'a çevrilir ve tüm NULL kontrol araçları tutarlı çalışır.
Bu fonksiyonlar birlikte de kullanılır: NULLIF ile istenmeyen değer NULL yapılır, COALESCE ile kontrollü bir varsayılana çevrilir. Örneğin sıfıra bölme sonucunda NULL yerine raporda tire ya da "hesaplanamadı" gösterilmek istenebilir; bu durumda önce NULLIF, sonra COALESCE uygulanır.
Toplama, sayma, JOIN ve sıralamada NULL
Toplama fonksiyonları NULL değerleri yok sayar. SUM ve AVG yalnızca dolu satırlar üzerinden çalışır. Bu, ortalamanın beklenenden farklı çıkmasına yol açabilir: eksik değerler sıfır sayılsaydı ortalama düşerdi. Hangisinin doğru olduğu iş sorusuna bağlıdır, ama farkın bilinçli olması gerekir.
COUNT(*) tüm satırları sayar, COUNT(sütun) ise yalnızca o sütunda NULL olmayanları. Aradaki fark, dolu alan oranını bulmak için de kullanılır.
JOIN tarafında şu durumlar öne çıkar. LEFT JOIN eşleşmeyen satırlar için sağ taraf sütunlarını NULL döndürür; bu NULL'lar sıklıkla "eşleşmesi olmayan kayıtları bul" sorgusunun temelidir. Öte yandan JOIN anahtarı NULL olan satırlar hiçbir zaman eşleşmez, çünkü NULL, NULL'a eşit değildir.
NOT IN ile birlikte NULL ciddi bir tuzaktır. Alt sorgunun sonucunda tek bir NULL bile varsa NOT IN koşulu hiçbir satır döndürmeyebilir. Bu durumda NOT EXISTS ya da alt sorguda NULL'ları dışlayan bir koşul kullanılmalıdır.
Sıralamada NULL'ların konumu sisteme göre değişir: bazı sistemler NULL'ları en başa, bazıları en sona koyar. Belirli bir davranış gerekiyorsa sıralama ifadesine açık bir kontrol eklenir.
Tasarımda NULL: NOT NULL ve varsayılan değerler
NULL yönetimi yalnızca sorgu yazarken değil, tablo tasarlanırken de başlar. Bir alanın boş olmaması gerekiyorsa sütun NOT NULL olarak tanımlanır; böylece veri girişinde boş bırakılması engellenir. Anahtar ve zorunlu alanlarda bu kısıt veri kalitesini baştan korur.
İsteğe bağlı alanlarda ise NULL'a izin vermek bilinçli bir karardır. Eğer NULL yerine yer tutucu değerler (boş metin, sabit eski tarih) kullanılırsa, sorgularda bu sahte değerler gerçek veriyle karışır ve analizler bozulur. Doğru yaklaşım, bilinmeyen değeri NULL olarak bırakmak ve sorgu tarafında kontrollü şekilde ele almaktır.
Varsayılan değer (DEFAULT) tanımlamak, yeni kayıtlarda alanın otomatik doldurulmasını sağlar. Örneğin kayıt tarihi ya da durum alanları için sıkça kullanılır. Ancak varsayılan değer her alan için uygun değildir; "bilinmiyor" ile "varsayılan" farklı anlamlar taşır.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Mindset kataloğundaki SQL ile Veri Sorgulama (Temel) eğitimi Filtreleme Teknikleri ve Temel Fonksiyonlar, Toplulaştırma Fonksiyonları ve Gruplama ve Koşullu İfadeler ve Değer Dönüşümleri modüllerini içerir. NULL kontrolü, varsayılan değer verme ve toplama davranışı bu başlıkların günlük uygulamalarındadır.
SQL ile Programlama Eğitimi ise Tablolarla Çalışma, Sorgular ve Toplama ve Gruplama başlıklarını bir arada sunar. Veri temizleme ve rapor doğrulama yapan analistler ile raporlama ekipleri için NULL davranışını tablo tasarımı ve sorgu açısından birlikte öğrenmek mümkündür.
İlgili Mindset programı
SQL ile Veri Sorgulama (Temel)
Sık sorulan sorular
NULL ile boş metin aynı şey midir?
Hayır. Boş metin bir değerdir; uzunluğu sıfırdır ve karşılaştırmalarda eşit ya da farklı olabilir. NULL ise değerin bilinmediğini ya da bulunmadığını gösterir ve karşılaştırmalarda bilinmiyor sonucu verir. Bazı sistemlerde (Oracle gibi) boş metin NULL olarak ele alınır, bu yüzden kullandığınız veritabanının davranışını bilmek gerekir.
COALESCE ile ISNULL arasındaki fark nedir?
COALESCE standart SQL'dir, birden çok argüman alır ve tüm büyük sistemlerde çalışır. ISNULL SQL Server'a özgüdür, yalnızca bir değer ve bir yedek değer alır, sonuç veri türünü baştaki argümandan belirler. Taşınabilir ve esnek kod için COALESCE tercih edilir; veri türü kesilmesi sorunlarında ISNULL farklı sonuç verebilir.
NULL değerler toplamayı bozar mı?
SUM NULL değerleri yok sayar, bu yüzden toplam bozulmaz; ancak bütün değerler NULL ise sonuç sıfır değil NULL döner. Bu durumu COALESCE ile sıfıra çevirebilirsiniz. Ortalamada ise NULL'ların sayıya dahil edilmemesi sonucu etkiler. Eksik değerlerin sıfır sayılıp sayılmayacağı iş sorusuna göre kararlaştırılmalıdır.
NULL olan kayıtları nasıl hızlıca bulurum?
WHERE sütun IS NULL koşuluyla bulunur. Tablo genelinde eksik veri oranını görmek için COUNT(*) ile COUNT(sütun) arasındaki farka bakılır. Çok sütunlu bir tablo için her sütunda koşullu sayım yapan tek bir sorgu yazılabilir. Bu analiz, veri temizliği işlerinin başlangıç noktasıdır.
NOT IN neden beklenmedik şekilde boş sonuç veriyor?
Alt sorgunun sonucunda en az bir NULL varsa NOT IN koşulu bilinmiyor sonucu üretir ve hiçbir satır dönmeyebilir. Bunu önlemek için NOT EXISTS kullanın ya da alt sorguya NULL olanları dışlayan bir koşul ekleyin. Bu sorun görünmeden ortaya çıktığı için sonuçları küçük bir örnekle doğrulamakta fayda var.
İlgili rehberler
İlgili eğitimler
Kategori: Veri Analitiği ve İş Zekası