HAVING ve WHERE Karşılaştırması
HAVING'in (kümeleri süzer) WHERE'den (satırları süzer) farkını ayırt edin ve ikisini aynı sorguda doğru şekilde uygulayın.
HAVING ve WHERE Karşılaştırması, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. 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.
İki Süzme Aşaması
WHERE, gruplamadan ÖNCE tek tek satırları süzer. HAVING, toplulaştırmadan SONRA grupları süzer. Benzer görünürler, ancak farklı aşamalarda çalışırlar.
WHERE Örneği
WHERE ham satırları süzer. Toplulaştırmaları göremez:
-- Sum totals for rows where status is 'paid':
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE status = 'paid'
GROUP BY user_id;HAVING Örneği
HAVING grupları süzer. Toplulaştırmalara başvurabilir:
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 5; -- only users with ≥ 5 ordersWHERE ve HAVING Birlikte Kullanımı
İkisi de aynı sorguda kullanılabilir:
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL '90 days'
GROUP BY user_id
HAVING SUM(total) > 1000;Toplulaştırmaları WHERE İçine Koymayın
Sorgu planlayıcısı WHERE ifadesini gruplamadan önce çalıştırır — toplulaştırmalar henüz kullanılamaz:
-- WRONG:
SELECT user_id, COUNT(*) FROM orders
WHERE COUNT(*) > 5 -- ERROR
GROUP BY user_id;
-- RIGHT — move to HAVING:
SELECT user_id, COUNT(*) FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;Mümkün Olduğunda Koşulları WHERE İçine Taşıyın
WHERE gruplamadan önce süzme yaptığı için toplulaştırmaya daha az satır girer. Yalnızca WHERE içinde ifade edilemeyen koşullar için HAVING kullanın.
-- Slightly slower (filters after grouping):
SELECT user_id, COUNT(*) FROM orders
GROUP BY user_id
HAVING user_id IN (1,2,3);
-- Faster (filters before grouping):
SELECT user_id, COUNT(*) FROM orders
WHERE user_id IN (1,2,3)
GROUP BY user_id;Mantıksal Çalıştırma Sırası
Kavramsal sıra:
FROM— tabloları seçin ve birleştirinWHERE— satırları süzünGROUP BY— gruplar oluşturunHAVING— grupları süzünSELECT— sütunları yansıtınORDER BY— sıralayınLIMIT— ilk N sonucu alın
GROUP BY Olmadan HAVING
HAVING ifadesini GROUP BY olmadan kullanabilirsiniz — tablonun tamamı tek bir grup olur:
SELECT SUM(total) FROM orders
HAVING SUM(total) > 1000000; -- prints only if total over 1MHAVING İçindeki Takma Adlar
Bazı veritabanları HAVING ifadesinin SELECT takma adlarına başvurmasına izin verir; PostgreSQL ve MySQL izin verir, standart SQL izin vermez. En taşınabilir yaklaşım, toplulaştırmayı tekrarlamaktır:
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 5; -- portable
-- HAVING order_count >= 5 -- works in PG / MySQLBirden Fazla Toplulaştırmayla HAVING
Birleşik toplulaştırma koşulları için HAVING kullanın:
SELECT user_id, COUNT(*) AS orders, SUM(total) AS revenue
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 5 AND SUM(total) > 1000;Performans Notu
HAVING içindeki bir toplulaştırma süzgeci, bir sütundaki WHERE koşulunun yararlanabildiği şekilde dizinlerden yararlanamaz. Yapabildiklerinizi WHERE içine taşıyın.
Özet
WHERE = satırları süzer. HAVING = grupları süzer.
- Toplulaştırmalar yalnızca HAVING içinde, hiçbir zaman WHERE içinde kullanılmaz
- Hız için koşulları WHERE içine taşıyın
- Gerektiğinde ikisini birlikte kullanın
Hızlı Kontrol
10'dan fazla sipariş vermiş kullanıcıları istiyorsunuz. Bunu hangi yan tümce süzer?
Sıkça Sorulan Sorular
“HAVING ve WHERE Karşılaştırması” dersi ücretsiz mi?
Evet — “HAVING ve WHERE Karşılaştırması” 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.
“HAVING ve WHERE Karşılaştırması” dersinde ne öğreneceğim?
HAVING'in (kümeleri süzer) WHERE'den (satırları süzer) farkını ayırt edin ve ikisini aynı sorguda doğru şekilde uygulayın. 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 3. dersidir.
“HAVING ve WHERE Karşılaştırması” 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
- COUNT, SUM, AVG, MIN, MAX
- Tek ve Birden Çok Sütunla GROUP BY
- HAVING ve WHERE Karşılaştırması
- Yaygın Tuzaklar: Toplamalarda NULL Değerleri