0Pricing
SQL Academy · Ders

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 dal
  • ELSE value — isteğe bağlı yedek değer
  • END — 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
END

CASE 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
  • ELSE belirtilmezse hiçbir şey eşleşmediğinde NULL elde edilir
  • Tüm dallar uyumlu veri türleri döndürmelidir
  • CASE, SELECT, WHERE iç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.

Bu kursun tüm dersleri

  1. CASE İfadesi
  2. Aranan ve Basit CASE
  3. Verileri Gruplara Ayırma ve Etiketleme
  4. ORDER BY ve Toplamlarda CASE
← SQL Academy Sayfasına Dön