Aranan ve Basit CASE
CASE yazmanın iki yolu.
Aranan ve Basit CASE, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. 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.
CASE Yazmanın İki Yolu
SQL, CASE ifadesinin iki çeşidini sunar: Basit CASE ve Aramalı CASE. Her ikisi de koşullara göre bir değer döndürür, ancak bu koşulların yazılma biçimi farklıdır.
Bu dersin sonunda her biçimi ne zaman kullanacağınızı ve bunları karıştırırken yapılan yaygın hatalardan nasıl kaçınacağınızı bileceksiniz.
Basit CASE — Temel Fikir
Basit CASE, tek bir ifadeyi bir değer listesiyle karşılaştırır. Bunu bir arama tablosu gibi düşünebilirsiniz: solda bir sütun veya değer seçer, ardından her WHEN dalında bu değerin hangi değere eşit olduğunu listelersiniz.
Sözdizimi: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END
SELECT
product_name,
category_id,
CASE category_id
WHEN 1 THEN 'Electronics'
WHEN 2 THEN 'Clothing'
WHEN 3 THEN 'Books'
ELSE 'Other'
END AS category_name
FROM products;Basit CASE Uygulamada
Burada CASE ifadesi anahtar sözcüğün hemen ardından gelir ve status sütunu, eşitlik kullanılarak her WHEN değerine karşılaştırılır. WHEN dallarında status = yazmadığınıza dikkat edin — karşılaştırma örtük olarak yapılır.
SELECT
order_id,
status,
CASE status
WHEN 'pending' THEN 'Awaiting payment'
WHEN 'paid' THEN 'Payment received'
WHEN 'shipped' THEN 'On its way'
WHEN 'delivered' THEN 'Completed'
ELSE 'Unknown status'
END AS status_label
FROM orders;Aramalı CASE — Temel Fikir
Aramalı CASE biçiminde CASE anahtar sözcüğünün hemen ardından bir ifade bulunmaz. Bunun yerine her WHEN dalında tam bir Boole koşulu yer alır. Bu biçim çok daha esnektir: farklı sütunları birleştirebilir, aralık denetimleri kullanabilir veya her WHEN içinde işlev çağırabilirsiniz.
Sözdizimi: CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END
SELECT
employee_name,
salary,
CASE
WHEN salary < 30000 THEN 'Entry Level'
WHEN salary < 60000 THEN 'Mid Level'
WHEN salary < 100000 THEN 'Senior'
ELSE 'Executive'
END AS salary_band
FROM employees;Aramalı CASE Uygulamada
Her WHEN dalı herhangi bir Boole ifadesini kabul ettiğinden, tek bir dalda birden çok sütunu birleştirebilirsiniz. Veritabanı WHEN yan tümcelerini yukarıdan aşağıya değerlendirir ve ilk TRUE dalının sonucunu döndürür.
SELECT
product_name,
stock,
price,
CASE
WHEN stock = 0 THEN 'Out of stock'
WHEN stock < 10 AND price > 100 THEN 'Low stock — premium item'
WHEN stock < 10 THEN 'Low stock'
ELSE 'In stock'
END AS availability
FROM products;Temel Yapısal Fark
Aşağıdaki açıklama temel ayrımı özetler:
Basit CASE — CASE'ten sonra tek bir ifade bulunur; her WHEN, bu ifadeyle eşitlik karşılaştırması yapar.
Aramalı CASE — CASE'ten sonra ifade bulunmaz; her WHEN bağımsız bir Boole koşuludur.
Basit CASE yalnızca eşitlik denetimleri yaptığından aralıkları, NULL değerlerini veya birden çok sütun içeren koşulları işleyemez. Doğrudan değer eşleşmesinin ötesinde bir işlem için Aramalı CASE kullanın.
-- Simple CASE: equality only
SELECT CASE day_number
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
ELSE 'Other'
END AS day_name
FROM schedule;
-- Searched CASE: any condition
SELECT CASE
WHEN day_number BETWEEN 1 AND 5 THEN 'Weekday'
WHEN day_number IN (6, 7) THEN 'Weekend'
END AS day_type
FROM schedule;NULL İşleme — Aramalı CASE Neden Daha İyi?
Basit CASE, dahili olarak = kullanır ve SQL'de NULL = NULL hiçbir zaman TRUE değildir. Bu nedenle Basit CASE, NULL olan bir sütunla eşleşemez. Aramalı CASE ile WHEN column IS NULL THEN ... yazabilirsiniz; bu ifade doğru şekilde çalışır.
-- Simple CASE: NULL branch never matches
SELECT CASE manager_id
WHEN NULL THEN 'No manager' -- this will NEVER fire
ELSE 'Has manager'
END
FROM employees;
-- Searched CASE: correct NULL check
SELECT CASE
WHEN manager_id IS NULL THEN 'No manager'
ELSE 'Has manager'
END AS manager_status
FROM employees;Aramalı CASE'te Sütunları Birleştirme
Aramalı CASE'in önemli bir gücü, her WHEN dalının tamamen farklı sütunlara başvurabilmesi veya işlev çağırabilmesidir. Bu sayede Basit CASE'in hiçbir şekilde işleyemeyeceği karmaşık iş kurallarını ifade edebilirsiniz.
SELECT
customer_name,
total_orders,
total_spent,
CASE
WHEN total_spent > 10000 AND total_orders > 20 THEN 'VIP'
WHEN total_spent > 5000 THEN 'Gold'
WHEN total_orders > 10 THEN 'Silver'
ELSE 'Standard'
END AS tier
FROM customers;ORDER BY İçinde CASE Kullanımı
Her iki CASE biçimi de ORDER BY içinde, verilerde bulunmayan özel bir sıralama düzeni oluşturmak için kullanılabilir. Burada Basit CASE, öncelik adlarını sayılara dönüştürerek satırların alfabetik sıraya göre değil, iş önceliğine göre sıralanmasını sağlar.
SELECT ticket_id, subject, priority
FROM support_tickets
ORDER BY
CASE priority
WHEN 'critical' THEN 1
WHEN 'high' THEN 2
WHEN 'medium' THEN 3
WHEN 'low' THEN 4
ELSE 5
END ASC;Toplulaştırma İşlevlerinin İçinde CASE
Aramalı CASE'i SUM veya COUNT içine yerleştirmek, koşullu toplulaştırma için klasik bir örüntüdür; bu işlem bazen özet tablo olarak adlandırılır. Birden çok sorgu çalıştırmak yerine, tek bir taramada birden fazla kategori toplamı üretmenizi sağlar.
SELECT
department,
COUNT(*) AS total_employees,
SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count,
SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN salary > 70000 THEN salary ELSE 0 END) AS high_earner_payroll
FROM employees
GROUP BY department;Doğru Biçimi Seçme
Pratik bir kural:
Tek bir sütunu bilinen sabit değerlerle eşleştiriyorsanız Basit CASE kullanın — daha kısa ve okunması daha kolaydır.
Diğer tüm durumlarda Aramalı CASE kullanın: aralıklar, NULL denetimleri, birden çok sütun içeren mantık veya koşulların içindeki işlev çağrıları.
Kararsız kaldığınızda Aramalı CASE her zaman çalışır. Hatta herhangi bir Basit CASE ifadesini Aramalı CASE olarak yeniden yazabilirsiniz; ancak bunun tersini yapamazsınız.
-- These two queries return identical results
-- Simple CASE (concise for equality)
SELECT CASE region_code
WHEN 'US' THEN 'United States'
WHEN 'UK' THEN 'United Kingdom'
ELSE 'International'
END AS region_name
FROM sales;
-- Equivalent Searched CASE
SELECT CASE
WHEN region_code = 'US' THEN 'United States'
WHEN region_code = 'UK' THEN 'United Kingdom'
ELSE 'International'
END AS region_name
FROM sales;Hızlı Kontrol
Basit CASE ile Aramalı CASE arasındaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz:
Basit CASE — CASE'ten sonra tek bir ifade yerleştirilir; her WHEN, bu ifadenin belirli bir değere eşit olup olmadığını denetler. Tek bir sütunu sabit bir etiket listesiyle eşleştirmek için en uygundur.
Aramalı CASE — CASE'ten sonra ifade bulunmaz; her WHEN tam bir Boole koşulu içerir. Aralıkları, NULL denetimlerini, birden çok sütun içeren mantığı ve işlev çağrılarını destekler.
Her iki biçim de dalları yukarıdan aşağıya değerlendirir ve TRUE olan ilk dalın sonucunu döndürür. Hiçbir dal eşleşmez ve ELSE bulunmazsa sonuç NULL olur. En yüksek esneklik için Aramalı CASE her zaman güvenli seçimdir — Basit CASE'in yaptığı her şeyi ve daha fazlasını yapabilir.
Sıkça Sorulan Sorular
“Aranan ve Basit CASE” dersi ücretsiz mi?
Evet — “Aranan ve Basit CASE” 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.
“Aranan ve Basit CASE” dersinde ne öğreneceğim?
CASE yazmanın iki yolu. 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 2. dersidir.
“Aranan ve Basit CASE” 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
- CASE İfadesi
- Aranan ve Basit CASE
- Verileri Gruplara Ayırma ve Etiketleme
- ORDER BY ve Toplamlarda CASE