Toplamlarda ve Birleştirmelerde NULL
NULL değerinin COUNT, SUM ve JOIN işlemlerindeki davranışı.
Toplamlarda ve Birleştirmelerde NULL, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. 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 Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
NULL Değerleri Hesaplamayı Değiştirir
Toplulaştırma işlevleri ve JOIN işlemleri NULL değerlerini özel biçimlerde ele alır. Kuralları bilmiyorsanız toplamlarınız ve sayımlarınız fark ettirmeden yanlış olabilir.
Bu derste COUNT, SUM, AVG, GROUP BY ve dış birleştirmelerin eksik değerlerle nasıl etkileştiği gösterilir.
SELECT amount FROM payments;
-- amount
-- -------
-- 100
-- NULL <- missing
-- 200Toplulaştırma İşlevleri NULL Değerlerini Yok Sayar
Çoğu toplulaştırma işlevi — SUM, AVG, MIN, MAX — NULL değerlerini basitçe atlar. Yalnızca veri içeren satırları hesaba katarlar.
Bu nedenle NULL bir tutar SUM işlemini bozmaz; toplamın dışında bırakılır.
-- Using amounts 100, NULL, 200
SELECT
SUM(amount) AS total, -- 300 (NULL skipped)
MIN(amount) AS lo, -- 100
MAX(amount) AS hi -- 200
FROM payments;AVG de NULL Değerlerini Atlar
AVG, NULL olmayan değerlerin toplamını NULL olmayan değerlerin sayısına böler. NULL değerleri her iki hesaba da katılmaz.
Bu önemlidir: {100, NULL, 200} kümesinin ortalaması 100 değil 150'dir — NULL, sıfır olarak sayılmaz.
-- (100 + 200) / 2 = 150, the NULL row is ignored
SELECT AVG(amount) AS avg_amount FROM payments;
-- If you WANT NULLs counted as 0, COALESCE first:
SELECT AVG(COALESCE(amount, 0)) AS avg_with_zeros FROM payments; -- 100COUNT(*) ve COUNT(column) Karşılaştırması
Bu ayrım birçok kişinin kafasını karıştırır:
COUNT(*), NULL içerenler de dahil olmak üzere satırları sayar.COUNT(column)yalnızca o sütunun NULL olmadığı satırları sayar.
-- 3 rows total, but only 2 have a non-NULL amount
SELECT
COUNT(*) AS row_count, -- 3
COUNT(amount) AS has_amount -- 2
FROM payments;COUNT(DISTINCT) ve NULL
COUNT(DISTINCT col), birbirinden farklı NULL olmayan değerlerin sayısını verir. NULL değerleri tamamen dışlanır — farklı değerlerin sayısına hiçbir zaman eklenmezler.
"Kaç tane benzersiz X var?" ölçümünü yaparken bunu aklınızda bulundurun.
-- statuses: 'paid', NULL, 'paid', 'void'
SELECT COUNT(DISTINCT status) AS distinct_statuses
FROM payments;
-- 2 (paid, void) -- NULL not countedBoş Kümedeki Toplulaştırmalar
Bir toplulaştırma sıfır satır üzerinde çalıştığında sonuç işleve göre değişir:
COUNT(...),0döndürür.SUM,AVG,MIN,MAX,NULLdöndürür.
Uygun olduğunda NULL toplamını 0'a dönüştürmek için COALESCE kullanın.
-- No rows match -> SUM is NULL, not 0
SELECT COALESCE(SUM(amount), 0) AS total
FROM payments
WHERE status = 'refunded'; -- no such rowsGROUP BY NULL Değerlerini Birlikte Gruplar
Başka yerlerde NULL = NULL bilinmeyen olsa da GROUP BY, tüm NULL değerlerini tek bir gruba yerleştirir.
Bu nedenle NULL bir kategori sonuçlarda kendi grubunu oluşturur ve eksik veriye sahip satırları birlikte özetlemenizi sağlar.
SELECT category, COUNT(*) AS n
FROM products
GROUP BY category;
-- category | n
-- ---------+---
-- books | 5
-- toys | 3
-- NULL | 2 <- all NULL categories in one groupDış Birleştirmelerden Gelen NULL Değerleri
Dış birleştirmeler NULL değerlerinin önemli bir kaynağıdır. Bir LEFT JOIN soldaki her satırı korur; sağ tarafta eşleşme bulunmadığında sağ taraftaki sütunlar NULL olur.
Bu NULL değerleri "eşleşen satır yok" anlamına gelir; "saklanan bir NULL değeri" anlamına gelmez.
SELECT c.name, o.id AS order_id
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
-- name | order_id
-- ------+---------
-- Alice | 10
-- Bob | NULL <- Bob has no ordersLEFT JOIN Sonrası Eşleşmeleri Sayma
Bir LEFT JOIN sonrasında yalnızca gerçek eşleşmeleri saymak için COUNT(*) yerine sağ tablodan NULL olmayan bir sütunu sayın.
COUNT(o.id), eşleşmeyen sol satırların oluşturduğu NULL içeren satırları yok sayar ve gerçek sipariş sayısını verir.
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Bob shows 0, not 1×NULLEşleşmeyenleri Filtreleme
İnce ama önemli bir tuzak: LEFT JOIN sonrasında sağ tabloya ait bir koşulu WHERE içine koymak, onu iç birleştirmeye dönüştürür; çünkü NULL = değer bilinmeyen olur ve filtrelenir.
Eşleşmeyen satırları korumak istiyorsanız koşulu ON yan tümcesine koyun veya NULL değerlerini açıkça kontrol edin.
-- Accidentally drops Bob (his o.status is NULL)
SELECT c.name FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'open';
-- Keep unmatched rows: move the test into ON
SELECT c.name FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id AND o.status = 'open';Pratik Kurallar
Bu kuralları her toplulaştırma ve birleştirme sorgusunda uygulayın:
- Toplulaştırmalar
COUNT(*)dışında NULL değerlerini yok sayar. COUNT(col), col sütununda NULL değerleri varsaCOUNT(*)değerinden küçüktür.- Boş kümede
SUM/AVGsonucu NULL'dır —COALESCEile içine alın. LEFT JOIN, eşleşmeyenler için NULL üretir; sağ taraftaki bir anahtarı sayın.- Sağ tablo filtreleri
WHEREyerineONiçinde yer almalıdır.
SELECT c.name,
COALESCE(SUM(o.amount), 0) AS spent,
COUNT(o.id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;Hızlı Kontrol
Bir amount sütununda üç satıra yayılmış 100, NULL ve 200 değerleri vardır. COUNT(*) ve COUNT(amount) hangi sonuçları verir?
Özet
NULL değerlerinin toplulaştırma ve birleştirmelerde nasıl ilerlediğini öğrendiniz: toplulaştırmalar NULL değerlerini atlar, COUNT(*) satırları sayarken COUNT(col) NULL olmayan değerleri sayar, boş küme toplamları NULL olur ve GROUP BY NULL değerlerini tek bir grupta toplar.
Ayrıca dış birleştirmelerin eşleşmeyenler için NULL ürettiğini ve sağ tablo filtrelerinin neden ON içinde yer alması gerektiğini gördünüz. Böylece NULL Değerleriyle Çalışma kursunu tamamladınız — artık eksik verileri güvenle işleyebilirsiniz.
-- A NULL-safe summary query
SELECT c.name,
COUNT(o.id) AS orders,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name
ORDER BY total_spent DESC;Yapay zeka eğitmeniyle SQL öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 46
- Dersler
- 183
Sıkça Sorulan Sorular
“Toplamlarda ve Birleştirmelerde NULL” dersi ücretsiz mi?
Evet — “Toplamlarda ve Birleştirmelerde NULL” 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 Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Toplamlarda ve Birleştirmelerde NULL” dersinde ne öğreneceğim?
NULL değerinin COUNT, SUM ve JOIN işlemlerindeki davranışı. SQL Academy 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 Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, 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 4. dersidir.
“Toplamlarda ve Birleştirmelerde NULL” 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 Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy 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
- NULL Gerçekte Ne Anlama Gelir
- IS NULL ve IS NOT NULL
- COALESCE ve NULLIF
- Toplamlarda ve Birleştirmelerde NULL