SQL WHERE Koşulunda NULL Kontrolü: IS NULL vs = NULL Hatası

# SQL WHERE Koşulunda NULL Kontrolü: IS NULL vs = NULL Hatası

SQL'de NULL değerleri kontrol ederken çoğu kişi hata yapar. Bir sütunda NULL olup olmadığını kontrol etmek istediğinde WHERE email = NULL yazarlar. Bu hiçbir zaman çalışmaz.

Neden? Çünkü SQL'de NULL, "bilinmeyen" anlamına gelir. Bilinmeyen bir şeyi eşitlik operatörüyle karşılaştıramazsın. = NULL her zaman yanlış sonuç döner.

NULL değerleri kontrol etmek için IS NULL veya IS NOT NULL kullanmalısın.

1WHERE sütun_adı IS NULL
2WHERE sütun_adı IS NOT NULL

Bir müşteri tablosu var. Bazı müşterilerin telefon numarası boş (NULL).

Yanlış (çalışmaz):

1SELECT * FROM müşteriler WHERE telefon = NULL;
2-- Sonuç: 0 satır (hiçbir şey bulamaz)

Doğru (çalışır):

1SELECT * FROM müşteriler WHERE telefon IS NULL;
2-- Sonuç: Telefon numarası olmayan tüm müşteriler

Çıktı Örneği:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1id | ad | telefon
21 | Ahmet | NULL
33 | Zeynep | NULL
45 | Fatih | NULL

NULL olmayan değerleri bulmak için:

1SELECT * FROM müşteriler WHERE telefon IS NOT NULL;
2-- Sonuç: Telefon numarası olan müşteriler

Çıktı Örneği:

1id | ad | telefon
22 | Mehmet | 5551234567
34 | Ayşe | 5559876543

SQL'de NULL, bir değer değildir. "Bilinmeyen" veya "tanımsız" demektir. Matematiksel olarak:

- 5 = 5 TRUE
- 5 = NULL NULL (ne doğru ne yanlış)
- NULL = NULL NULL (hiçbir zaman TRUE değildir)

Bu yüzden WHERE koşulunda her zaman IS NULL kullanmalısın.

| İşlem | Doğru Syntax | Yanlış Syntax |
|-------|-------------|---------------|
| NULL olanları bul | IS NULL | = NULL |
| NULL olmayanları bul | IS NOT NULL |!= NULL |

Bu kuralı hatırlasan SQL'de NULL sorunlarından kurtulursun.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz

6 yorum

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    evet mantık çıkınca işte rahatlatıyor başta neden böyle diye kızıyorsun ama sonra aslında

  • adlı kullanıcıya yanıt verdi
    kodkafasi

    aynen ya "bilinmeyen" diye düşününce de garip geliyor başta ama mantığı anladıktan sonra

  • uykuarasi

    ben de bunu öğrenirken çok sinir oldum neden böyle yapıldığını anlamıyordum başta

  • kayipkumanda

    bu çok yaygın bir hata herkes buna takılıyor başta NULLun eşitlikle çalışmaması mantıklı

  • adlı kullanıcıya yanıt verdi
    kayipkumanda

    evet sonra fark ediyorsun ki SQL aslında doğru davranıyor bilinmeyeni bilinmeyen olarak tutmak daha mantıklı

  • adlı kullanıcıya yanıt verdi
    uykuarasi

    hocam ben de şu an anladım aslında NULLu bilinmeyen olarak düşününce diğer her şey