🟢 NULL Değerler

NULL Değerler: NULL'ı, bir anket formunda boş bırakılmış kutu gibi düşün — ama '0 yazılmış kutu' ile aynı şey değil.

NULL'ı, bir anket formunda boş bırakılmış kutu gibi düşün — ama '0 yazılmış kutu' ile aynı şey değil. 'Kaç kardeşin var?' sorusuna '0' yazan kişi cevap vermiştir; kutuyu boş bırakan kişi cevap vermemiştir. NULL, 'değer yok' değil, 'bilinmiyor' anlamına gelir — bir müşterinin telefon numarasının boş bırakılması 'telefonu yok' demek değil, 'girilmedi' demektir. Bu nüans SQL'i Java'dan temelden ayırır: Java'da `null == null` ifadesi `true` döndürür; SQL'de `NULL = NULL` ise `NULL` döndürür, yani ne true ne false. Peki neden bu kadar karmaşık bir davranış tasarlandı? Çünkü 'bilinmeyen' ile 'bilinmeyen'in eşit olup olmadığı bilinmez — iki ayrı müşteri kaydının telefon alanı boşsa, bunlar aynı müşteri mi? Bilinmez. Java'da `Objects.isNull(value)` ya da `value == null` kullanırsın; SQL'de `IS NULL` ya da `IS NOT NULL` zorunludur, `= NULL` her zaman 0 satır döndürür. QA mühendisi için NULL'ın en sinsi riski şudur: opsiyonel alanlar içeren test verisi sorgularken `WHERE error_msg = NULL` yazarsan sorgu sıfır satır döner ve assertion geçer — oysa tabloda NULL değerleri olan satırlar mevcut olabilir; bu yanlış PASS, gerçek bir regression'ı gizler.

Micro Lab: SQL — GROUP BY / CTE / Window

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

Adim Adim: SQL — GROUP BY / CTE / Window

Aggregation mi Window mi?

Aggregation (ozetleme) mi Window (satir bazli hesap) mi? Onu belirle

Aggregation icin GROUP BY ile ozetlenecek sutunu sec

HAVING ile gruplara kosul uygula — WHERE gibi ama agregasyon sonrasinda

WITH cte_adi AS (...) SELECT ... FROM cte_adi ile sorguyu modülerlestir

OVER(PARTITION BY) ekle

Window icin SUM(col) OVER (PARTITION BY bolum ORDER BY siralama) kullan

SQL GROUP BY ve Window Function sorgusu yazma sirasi nedir?

İnteraktif Örnek: test_results Tablosu

NULL — En Yaygın SQL Hatası