🟢 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ı