Üç Değerli Mantık ve UNKNOWN
NULL = NULL ifadesinin neden TRUE olmadığını ve UNKNOWN değerinin koşullarda nasıl yayıldığını öğrenin.
Üç Değerli Mantık ve UNKNOWN, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
NULL Adayları Neden Yanıltır
NULL, SQL mülakatlarında yanlış yanıtların bir numaralı kaynağıdır. Tuzak, ona normal bir değer gibi davranmaktır; oysa NULL, “bilinmeyen” veya “eksik” anlamına gelir; sıfır ya da boş dize değildir.
İşe alım uzmanları bunu sever; çünkü sözdizimi doğru görünür ama sonuç fark ettirmeden yanlıştır. Size “bir satır döndürmesi gereken” bir filtre gösterip neden hiçbir şey döndürmediğini sorabilirler.
Bu derste her NULL sorusunu açıklığa kavuşturacak zihinsel modeli oluşturacaksınız: üç değerli mantık. Karşılaştırmaların TRUE, FALSE veya UNKNOWN döndürebileceğini içselleştirdiğinizde gerisi gelir.
NULL Bir Değer Değildir
Bir mülakatta söylenebilecek en önemli tek cümle şudur: NULL, bir değerin yokluğudur; kendisi bir değer değildir.
Bu, sayıları karşılaştırdığınız gibi = ile karşılaştıramayacağınız anlamına gelir. Veritabanı iki bilinmeyenin eşit olup olmadığını bilemez; bu nedenle TRUE ya da FALSE sonucuna bağlanmaz.
NULL = 5FALSE değildir, UNKNOWN’durNULL = NULLTRUE değildir, UNKNOWN’durNULL <> NULLde UNKNOWN’dur
NULL alabilen bir sütunda basit bir eşitlik filtresinin satırları sessizce dışarıda bırakmasının nedeni budur.
İki Değerli Mantık ve Üç Değerli Mantık
Çoğu programlama dili iki değerli mantık kullanır: bir ifade TRUE ya da FALSE olur. SQL, bir karşılaştırmada NULL yer aldığında üçüncü bir sonuç olan UNKNOWN değerini ekler.
Bu nedenle SQL’deki her koşul üç sonuçtan birini alabilir: TRUE, FALSE veya UNKNOWN. WHERE yan tümcesi bir satırı yalnızca koşulu tam olarak TRUE olduğunda tutar. Filtreleme sırasında UNKNOWN, FALSE gibi davranır; ancak mantıksal olarak aynı şey değildir.
Mülakat yapanlar bu ayrımı bilip bilmediğinizi sınar; çünkü UNKNOWN, NOT altında FALSE’tan farklı davranır.
Satırları Sessizce Dışarıda Bırakan Bir Filtre
İşte klasik, adım adım işlenmiş örnek. bonus değerinin bazen NULL olduğunu varsayın. Bir işe alım uzmanı soruyor: “Bu sorgu bonusu 1000 olmayan herkesi döndürmeli. Bonusu olmayan çalışanları neden atlıyor?”
bonus değerinin NULL olduğu bir satırda bonus <> 1000, TRUE değil UNKNOWN olarak değerlendirilir. WHERE yalnızca TRUE olan satırları tuttuğu için bu çalışanlar sonuçtan kaybolur.
Çözüm, NULL’u açıkça ele almaktır; bunu sonraki derste ele alacağız. Şimdilik eksik satırların bir hata değil, mantıksal bir sonuç olduğunu fark edin.
SELECT name, bonus
FROM employees
WHERE bonus <> 1000;
-- Rows where bonus IS NULL are excluded:
-- NULL <> 1000 evaluates to UNKNOWN, not TRUEAND İfadelerinde NULL
Üç değerli mantık, AND davranışını değiştirir. Kuralı ezberlerseniz herhangi bir doğruluk tablosu sorusunu anında yanıtlayabilirsiniz.
- TRUE AND UNKNOWN = UNKNOWN
- FALSE AND UNKNOWN = FALSE
- UNKNOWN AND UNKNOWN = UNKNOWN
Sezgisel olarak şöyle düşünebilirsiniz: AND, kesin olarak FALSE olmak için tek bir FALSE’a ihtiyaç duyar. Bu nedenle FALSE AND ne olursa olsun FALSE kalır. Ancak TRUE AND bilinmeyen yine bilinmeyendir; çünkü bilinmeyen tarafın sonucu her iki yönde de çıkabilir.
-- If status = 'active' is TRUE but bonus = 100 is UNKNOWN:
SELECT *
FROM employees
WHERE status = 'active' AND bonus = 100;
-- Combined result is UNKNOWN, so the row is NOT returnedOR İfadelerinde NULL
OR, AND mantığını yansıtır. Kesin olarak TRUE olmak için yalnızca bir TRUE’ya ihtiyaç duyar; bu nedenle TRUE, bilinmeyeni etkisizleştirir.
- TRUE OR UNKNOWN = TRUE
- FALSE OR UNKNOWN = UNKNOWN
- UNKNOWN OR UNKNOWN = UNKNOWN
Dolayısıyla bir dal bilinmeyen olsa bile başka bir dal gerçekten TRUE olduğu sürece satır bir OR koşuluyla eşleşebilir. AND sorusundan sonra bu, sık sorulan bir devam sorusudur.
SELECT *
FROM employees
WHERE department = 'Sales' OR bonus = 100;
-- A Sales employee with NULL bonus:
-- TRUE OR UNKNOWN = TRUE, so the row IS returnedNOT, TRUE/FALSE Değerlerini Tersine Çevirir ama UNKNOWN’ı Çevirmez
İşte mülakat yapanların sona sakladığı incelikli nokta. NOT, TRUE’yu FALSE’a ve FALSE’ı TRUE’ya çevirir; ancak NOT UNKNOWN yine UNKNOWN’dur.
Bu yüzden sonuç vermeyen bir koşulu yalnızca NOT ile sarmalayarak sonucu tersine çeviremezsiniz. bonus = 1000 NULL olan bir satır için UNKNOWN ise, NOT (bonus = 1000) da UNKNOWN olur ve satır yine dışarıda bırakılır.
Olumsuzlama NULL satırlarını kurtarmaz. Yalnızca açıkça yazılmış bir IS NULL kontrolü bunu yapar.
-- For a row where bonus IS NULL:
-- bonus = 1000 -> UNKNOWN
-- NOT (bonus = 1000) -> UNKNOWN (still excluded)
SELECT * FROM employees WHERE NOT (bonus = 1000);Uygulamalı Örnek: NOT IN Tuzağı
En çok sorulan NULL bulmacalarından biridir. NULL içeren bir listeyle kullanılan NOT IN, NULL’u yalnızca yok saymasını bekleyen adayları şaşırtacak şekilde hiç satır döndürmez.
Perde arkasında x NOT IN (1, 2, NULL) ifadesi x <> 1 AND x <> 2 AND x <> NULL biçimine açılır. Son karşılaştırma UNKNOWN’dur ve TRUE AND TRUE AND UNKNOWN, UNKNOWN’a indirgenir; bu yüzden hiçbir kayıt koşulu sağlamaz.
Güvenli seçenek NOT EXISTS kullanmaktır; bu ifade bu sorundan etkilenmez.
-- Returns ZERO rows if the subquery yields any NULL
SELECT name
FROM employees
WHERE manager_id NOT IN (SELECT manager_id FROM managers);
-- Each comparison against NULL becomes UNKNOWN,
-- and the AND-chain collapses to UNKNOWN for every row.UNKNOWN Neden WHERE İçinde FALSE Gibi Davranır
Sık sorulan bir devam sorusu şudur: “UNKNOWN, FALSE değilse satır neden FALSE satırı gibi dışarıda bırakılıyor?”
Yanıt kesindir: WHERE, ON ve HAVING yalnızca TRUE olanı tutma kuralını kullanır. FALSE ve UNKNOWN bu kontrolden geçemez; bu nedenle filtreleme açısından aynı görünürler.
Aradaki fark yalnızca olumsuzlama ve CHECK kısıtlarında ortaya çıkar. Bir CHECK kısıtı, koşul TRUE veya UNKNOWN olduğunda satırı kabul eder; dolayısıyla NULL, engelleyeceğini düşündüğünüz bir CHECK’ten geçebilir.
-- CHECK passes on TRUE or UNKNOWN, so NULL salary is allowed:
-- CONSTRAINT salary_positive CHECK (salary > 0)
-- INSERT ... salary = NULL -> NULL > 0 is UNKNOWN -> allowedDaha Derin Bir Örnek: COUNT ve Doğruluk Açığı
Gerçekçi bir mülakat sorusuyla konuyu birleştirelim. “100 çalışanımız var. SELECT COUNT(*) WHERE bonus = 100 30 döndürüyor ve WHERE bonus <> 100 50 döndürüyor. Diğer 20 nerede?”
Eksik 20 çalışanın bonusu NULL’dur. Bu çalışanlar için ne = 100 ne de <> 100 TRUE olur; her ikisi de UNKNOWN olduğu için çalışanlar her iki filtreden de tamamen geçemez.
“Gruplar toplam sayıya ulaşmıyor, çünkü NULL hiçbir koşulu sağlamıyor” demeniz, mülakat yapanların duymak istediği tam yanıttır.
SELECT
COUNT(*) FILTER (WHERE bonus = 100) AS eq_100,
COUNT(*) FILTER (WHERE bonus <> 100) AS ne_100,
COUNT(*) FILTER (WHERE bonus IS NULL) AS null_bonus,
COUNT(*) AS total
FROM employees;Mülakatta Vurgulanacak Noktalar
NULL mantığı gündeme geldiğinde ileri düzey bilgi sahibi görünmek için şu noktaları vurgulayın:
- NULL bilinmeyen anlamına gelir; onunla yapılan karşılaştırmalar UNKNOWN sonucu verir.
- SQL, üç değerli mantık kullanır: TRUE, FALSE, UNKNOWN.
- WHERE, ON ve HAVING yalnızca TRUE olan satırları tutar.
NOT UNKNOWNyine UNKNOWN’dur; bu nedenle olumsuzlama NULL satırlarını geri getirmez.- Herhangi bir NULL içeren
NOT INhiç satır döndürmez;NOT EXISTSkullanmayı tercih edin.
Önce modeli açıklayın, sonra doğruluk tablosunu adım adım ele alın. Bu sıralama, yalnızca püf noktayı değil nedenini de anladığınızı gösterir.
Hızlı Kontrol
Üç değerli mantık anlayışınızı sınayın.
Özet
Artık temel NULL zihinsel modeline sahipsiniz:
- NULL bir değer değil, bilinmeyendir; onu
=veya<>ile asla karşılaştırmayın. - SQL üç değerlidir: koşullar TRUE, FALSE veya UNKNOWN döndürür.
- Filtreleme yan tümceleri yalnızca TRUE olanları tutar; UNKNOWN satırları FALSE satırları gibi yok olur.
NOT, TRUE ve FALSE’ı tersine çevirir ancak UNKNOWN’ı değiştirmez.NOT IN+ NULL tuzağı sıfır satır döndürür;NOT EXISTSkullanın.
Bir sonraki konu: IS NULL, IS NOT NULL ve NULL güvenli eşitlik operatörleriyle NULL’u doğru şekilde sınamak.
Sıkça Sorulan Sorular
“Üç Değerli Mantık ve UNKNOWN” dersi ücretsiz mi?
Evet — “Üç Değerli Mantık ve UNKNOWN” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“Üç Değerli Mantık ve UNKNOWN” dersinde ne öğreneceğim?
NULL = NULL ifadesinin neden TRUE olmadığını ve UNKNOWN değerinin koşullarda nasıl yayıldığını öğrenin. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Üç Değerli Mantık ve UNKNOWN” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Üç Değerli Mantık ve UNKNOWN
- IS NULL, IS NOT NULL ve NULL Güvenli Eşitlik
- COALESCE, NULLIF ve ISNULL
- Toplulaştırmalarda, Birleştirmelerde ve DISTINCT içinde NULL Değerler