DBAtlas · Veritabanı operasyon atlası

NULL yönetimi (COALESCE/NVL/NULLIF/IS NULL)

Oracle

-- COALESCE: ilk NULL olmayanı döndürür (standart)
SELECT ad, COALESCE(telefon, cep, 'yok') AS iletisim FROM musteri;

-- Oracle'a özgü NVL / NVL2
SELECT NVL(bakiye, 0) FROM musteri;
SELECT NVL2(indirim, 'var', 'yok') FROM siparis;

-- NULLIF ve IS NULL
SELECT NULLIF(a, b) FROM t;   -- a=b ise NULL
SELECT ad FROM musteri WHERE telefon IS NULL;

NULL (bilinmeyen değer) yönetimi için: COALESCE listedeki ilk NULL olmayanı döndürür (standart, çok argümanlı). Oracle'a özgü NVL(a,b) iki argümanlı karşılıktır; NVL2 NULL/ dolu durumuna göre farklı değer verir. NULLIF(a,b) eşitse NULL üretir. NULL testi daima IS NULL / IS NOT NULL ile yapılır (= NULL çalışmaz).

PostgreSQL

SELECT ad, COALESCE(telefon, cep, 'yok') AS iletisim FROM musteri;
SELECT NULLIF(bolen, 0) FROM t;   -- 0'a bölmeyi engelle
SELECT ad FROM musteri WHERE telefon IS NULL;
-- Oracle NVL karşılığı COALESCE'tir

PostgreSQL standart COALESCE, NULLIF ve IS NULL/IS NOT NULL sunar; Oracle'ın NVL'si yerine COALESCE kullanılır. NULL karşılaştırması için = değil IS kullanılır; iki NULL'ı eşit saymak gerekirse 'IS NOT DISTINCT FROM' operatörü işe yarar.

MySQL

SELECT ad, COALESCE(telefon, cep, 'yok') AS iletisim FROM musteri;

-- MySQL kısayolu: IFNULL (iki argüman)
SELECT IFNULL(bakiye, 0) FROM musteri;
SELECT NULLIF(a, b) FROM t;
SELECT ad FROM musteri WHERE telefon IS NULL;

MySQL/MariaDB standart COALESCE ve NULLIF'i destekler; iki argümanlı kısayol olarak IFNULL(a,b) vardır (Oracle NVL benzeri). NULL-güvenli eşitlik için <=> operatörü kullanılır (iki NULL'ı eşit sayar). NULL testi IS NULL / IS NOT NULL ile yapılır.

SQL Server

SELECT ad, COALESCE(telefon, cep, 'yok') AS iletisim FROM musteri;

-- SQL Server kısayolu: ISNULL (iki argüman)
SELECT ISNULL(bakiye, 0) FROM musteri;
SELECT NULLIF(a, b) FROM t;
SELECT ad FROM musteri WHERE telefon IS NULL;

SQL Server standart COALESCE (çok argümanlı, veri tipini yükselterek) ve iki argümanlı ISNULL(a,b) sunar; ikisi ince farklarla ayrışır (COALESCE standart ve tip önceliği daha esnektir). NULLIF ve IS NULL da desteklenir. ISNULL Oracle NVL'nin karşılığıdır (isim benzerdir).

MongoDB

// COALESCE karşılığı: $ifNull
db.musteri.aggregate([
  { $project: { ad: 1,
      iletisim: { $ifNull: ["$telefon", "$cep", "yok"] } } }
])
// NULL / alan yok kontrolü:
db.musteri.find({ telefon: { $in: [null] } })

MongoDB aggregation'da COALESCE karşılığı $ifNull operatörüdür (birden çok argüman, ilk null/eksik olmayanı döndürür). Sorguda { alan: null } hem değeri null olan hem de alanı hiç olmayan belgeleri eşler; ayrımı { alan: { $type: 'null' } } veya $exists ile netleştirirsiniz.

Redis

# Redis'te NULL yerine 'anahtar/alan yok' kavramı vardır:
EXISTS musteri:1              # anahtar var mı?
HGET musteri:1 telefon        # alan yoksa nil döner
GET yok_olan                  # (nil)

Redis'te SQL anlamında NULL yoktur; karşılığı 'anahtar yok' veya Hash alanının bulunmaması durumudur ve komutlar bu durumda nil döndürür. Varsayılan değer mantığı (COALESCE gibi) uygulama tarafında nil kontrolüyle uygulanır. Alan varlığı HEXISTS ile denetlenir.

Elasticsearch

# Alan yoksa varsayılan atama (missing bucket / null_value)
# Sorguda alanı olmayanları bulma:
GET musteri/_search
{ "query": { "bool": { "must_not": { "exists": { "field": "telefon" } } } } }
# Mapping'de null_value ile boşları belirli değere eşle

Elasticsearch'te null veya eksik alanlar 'exists' sorgusuyla denetlenir (must_not exists = alanı olmayanlar). COALESCE benzeri varsayılan için mapping'de 'null_value' tanımlanır ya da agregasyonlarda 'missing' parametresiyle boşlara bir değer atanır. Runtime/script ile de varsayılan üretilebilir.

DBAtlas'ta aç →