CASE İfadesi
Bir sorgunun içindeki IF/THEN mantığı.
CASE İfadesi, CoddyKit'te ücretsiz bir SQL Academy 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 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.
SQL'de Dallanma Mantığı
Bazen bir sorgunun karar vermesi gerekir: bu olursa şunu yap, aksi hâlde başka bir şey yap. SQL bunun için size CASE ifadesini sunar.
CASE, koşullara göre farklı değerler döndürmenizi doğrudan bir SELECT içinde sağlar. Bunu SQL'deki koşullu dallanma zinciri olarak düşünebilirsiniz.
SELECT name,
CASE WHEN price > 100 THEN 'expensive'
ELSE 'affordable'
END AS price_band
FROM products;CASE Yapısı
Bir CASE ifadesinin birkaç bölümü vardır:
WHEN condition THEN value— bir veya daha fazla dalELSE value— isteğe bağlı yedek değerEND— ifadeyi kapatır (zorunlu!)
SQL, WHEN dallarını yukarıdan aşağıya değerlendirir ve doğru olan ilk dalın değerini döndürür.
CASE WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
ENDCASE Bir Değer Döndürür
Temel fikir şudur: Bir CASE ifadesi her satır için tek bir değere dönüşür. Bir değer ürettiği için, değere izin verilen her yerde kullanılabilir — SELECT listesinde, WHERE içinde, ORDER BY içinde ve hatta işlevlerin içinde.
Burada her siparişi basit bir durum etiketiyle etiketler.
SELECT order_id,
CASE WHEN shipped_at IS NOT NULL THEN 'shipped'
WHEN paid_at IS NOT NULL THEN 'paid'
ELSE 'pending'
END AS status
FROM orders;İlk Eşleşme Kazanır
Sıra önemlidir. SQL her WHEN dalını sırayla denetler ve doğru olan ilk dalda durur. Daha sonraki dallar eşleşse bile dikkate alınmaz.
Aşağıda 1000'in üzerindeki bir sipariş **'büyük'** olur, hiçbir zaman **'orta'** olmaz; çünkü ilk eşleşen dal kazanır.
SELECT order_id, total,
CASE WHEN total >= 1000 THEN 'large'
WHEN total >= 100 THEN 'medium'
ELSE 'small'
END AS size_band
FROM orders;ELSE Dalı
ELSE dalı diğer tüm durumları kapsar. WHEN koşullarının hiçbiri doğru değilse CASE, ELSE değerini döndürür.
ELSE dalını atlarsanız ve hiçbir şey eşleşmezse CASE, NULL döndürür. Bu, beklenmedik NULL değerlerinin yaygın bir kaynağıdır; bu nedenle tanımlı bir yedek değer istediğinizde açık bir ELSE ekleyin.
SELECT name,
CASE WHEN stock = 0 THEN 'out of stock' END AS note
FROM products;
-- rows with stock > 0 get NULL in note (no ELSE)Koşullar Her Şey Olabilir
Bir WHEN koşulu, WHERE yan tümcesinde yazdığınız türden bir mantıksal ifadedir. Karşılaştırmaları, AND, OR, BETWEEN, IN, LIKE ve daha fazlasını kullanabilirsiniz.
SELECT email,
CASE WHEN country IN ('US','CA') AND age >= 18 THEN 'eligible'
WHEN email LIKE '%@test.com' THEN 'test account'
ELSE 'review'
END AS segment
FROM users;Sonuç Türleri Uyumlu Olmalı
Bir CASE ifadesinin her dalı uyumlu bir türde değerler döndürmelidir; çünkü sütunun tek bir türü olması gerekir. Metin ve sayıları karıştırmak hataya veya beklenmedik tür dönüşümüne yol açar.
Bir dalda sayılara, diğerinde metne ihtiyacınız varsa türlerin uyumlu olması için tür dönüşümünü açıkça yapın.
SELECT product_id,
CASE WHEN on_sale THEN price * 0.9
ELSE price
END AS effective_price -- all branches numeric: good
FROM products;WHERE İçinde CASE Kullanımı
CASE bir değer ürettiği için sonucunu bir WHERE yan tümcesi içinde karşılaştırabilirsiniz. Bu, dinamik filtreleme kuralları için kullanışlıdır.
Yine de çoğu zaman WHERE içindeki yalın mantıksal ifadeler daha açıktır — CASE yapısını yalnızca dallanma koşulu gerçekten ifadeyi sadeleştiriyorsa WHERE içinde kullanın.
SELECT *
FROM orders
WHERE CASE WHEN priority = 'high' THEN total > 0
ELSE total > 500
END;CASE İç İçe Kullanımı
Katmanlı bir mantığı ifade etmek için bir CASE ifadesini başka bir CASE dalının içine yerleştirebilirsiniz. Bu işe yarar, ancak derin biçimde iç içe geçmiş ifadelerin okunması zorlaşır.
İç içe kullanım düzeyini düşük tutun; yapı büyürse ayrı bir sütun veya bir başvuru tablosu genellikle daha temiz olur.
SELECT order_id,
CASE WHEN region = 'EU' THEN
CASE WHEN total > 100 THEN 'EU big'
ELSE 'EU small' END
ELSE 'other'
END AS bucket
FROM orders;Toplulaştırmalarla CASE
Güçlü bir model şudur: Bir CASE ifadesini SUM veya COUNT gibi bir toplulaştırma işlevinin içine alın. Böylece tek geçişte satırları koşula bağlı olarak sayabilir veya toplayabilirsiniz; buna bazen koşullu toplulaştırma ya da özet tablo denir.
SELECT
COUNT(*) AS total_orders,
SUM(CASE WHEN status = 'shipped' THEN 1 ELSE 0 END) AS shipped,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending
FROM orders;CASE'in Bilerek NULL Döndürmesi
Bir daldan NULL döndürmek bazen tam olarak istediğiniz şeydir — örneğin göstermek istemediğiniz bir değeri boş bırakmak veya NULL değerlerini yok sayan sonraki bir toplulaştırmaya girdi sağlamak için.
Burada yalnızca büyük siparişlerin toplamı korunur; diğerleri NULL olur, böylece AVG onları atlar.
SELECT order_id,
CASE WHEN total >= 1000 THEN total
ELSE NULL
END AS large_order_total
FROM orders;Hızlı Kontrol
total = 1500 olan bir satır için şu ifadeyi düşünün:
CASE WHEN total >= 100 THEN 'medium' WHEN total >= 1000 THEN 'large' ELSE 'small' END
Hangi değeri döndürür?
Özet: CASE İfadesi
SQL'de koşullu mantığın temelini öğrendiniz:
CASE WHEN ... THEN ... ELSE ... END, her satır için bir değer döndürür- Dallar yukarıdan aşağıya denetlenir; ilk eşleşme geçerlidir
ELSEbelirtilmezse hiçbir şey eşleşmediğindeNULLelde edilir- Tüm dallar uyumlu veri türleri döndürmelidir
CASE,SELECT,WHEREiçinde ve toplulaştırma işlevlerinin içinde çalışır
Sırada CASE'in iki sözdizimsel biçimini karşılaştıracağız.
SELECT name,
CASE WHEN price > 100 THEN 'expensive'
WHEN price > 20 THEN 'mid'
ELSE 'cheap'
END AS tier
FROM products;Sıkça Sorulan Sorular
“CASE İfadesi” dersi ücretsiz mi?
Evet — “CASE İfadesi” 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.
“CASE İfadesi” dersinde ne öğreneceğim?
Bir sorgunun içindeki IF/THEN mantığı. 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 1. dersidir.
“CASE İfadesi” 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.