# CASE ve IF ile SQL'de if else if mantığına ilişkin pratik kılavuz

> SQL'de if-else-if mantığını öğrenin. Kılavuzumuzda, MySQL ve SQL Server'da verileri dönüştürmek için CASE ve IF'in nasıl kullanıldığı pratik örneklerle açıklanmaktadır.

Source: https://www.electe.net/tr/post/if-else-if-in-sql

Site guide: https://www.electe.net/tr/llms.txt

Başka programlama dillerine alışmış birçok kişi, klasik `IF ELSE IF` ifadesini SQL'de nasıl tekrarlayacağını merak ediyor. Cevap şu: SQL'de bu isimle doğrudan bir komut yoktur, ancak daha güçlü ve zarif bir çözüm sunar: **CASE WHEN** ifadesi. Bu, sorgularınızda çoklu koşulları doğrudan yönetmek için standart ve evrensel çözümdür. `CASE` ile birlikte, T-SQL ve MySQL gibi bazı diyalektler daha basit durumlar için `IIF()` ve `IF()` gibi daha kısa yollar da sunar.

## Neden koşullu mantık SQL'de bir süper güçtür?

Müşterileri harcama dilimlerine göre segmentlere ayırmanız, destek taleplerine aciliyetlerine göre farklı öncelikler atamanız veya ürünleri mevsimselliğe göre etiketlemeniz gerektiğini düşünün. Verileri dışa aktarmak ve başka bir yerde işlemek zorunda kalmadan, tüm bunları doğrudan veritabanında yapmak istersiniz, değil mi?

İşte SQL'deki koşullu mantığın gücü tam da budur. Basit bir veri alımını gerçek bir iş analizine dönüştüren şey, işte bu kod satırıdır.

SQL'de "if else if" mantığını ustaca kullanmak, verileri sorgulayanlarla verilerden bilgi çıkaranlar arasındaki farkı belirleyen bir beceridir. Bu kılavuzda, sorgularınızı basit kayıt listelerinden dinamik analiz araçlarına nasıl dönüştürebileceğinizi göstereceğiz.

Ham verileri ayıklayıp bunları Excel veya Python'a aktarmak yerine, şunları yapmayı öğreneceksiniz:

- **Karmaşık içgörüler oluşturmak** doğrudan veritabanı seviyesinde, süreçlerinizi hızlandırarak.
- **Daha temiz SQL kodu yazmak**, okunabilir ve inanılmaz derecede daha verimli.
- **Ayrıntılı yanıtlar elde etmek** tek, güçlü bir ifadeyle.

Koşullu mantık, iş zekasını doğrudan sorguya taşımanıza olanak tanır. Metrikleri sonradan hesaplamak yerine, verileri çıkarırken bunları oluşturursunuz. Bu sayede analizleriniz daha hızlı, tekrarlanabilir ve karar alma sürecine entegre hale gelir.

Bu kılavuzun sonunda, veritabanınızın kapasitesini en üst düzeyde kullanarak verileri kararlara dönüştürebileceksiniz. KOBİ’ler için yapay zeka destekli bir veri analitiği platformu olan ELECTE gibi platformlar, rapor oluşturmayı otomatikleştirmek için tam da bu ilkeleri kullanır ve karmaşık sorguları, iş kararlarını yönlendiren anında görselleştirmelere dönüştürür.

Mantığınız basit bir "bu olursa, şunu yap"ın ötesine geçiyorsa, **CASE** ifadesi SQL'de en güçlü ve güvenilir aracınız haline gelir. Belirli bir diyalekte özgü bir hile değildir, çoklu koşulları yönetmek için ANSI-SQL standardıdır. Bu, kodunuzun PostgreSQL'den SQL Server'a kadar hemen her yerde çalışacağı anlamına gelir.

`CASE`'i sorgunuza doğrudan yerleştirilmiş bir karar ağacı gibi düşünün. Karmaşık `IF`'leri iç içe zincirleyerek kısa sürede okunamaz hale gelen ve bakımı kabusa dönüşen bir kod oluşturmak yerine, `CASE` size bir dizi koşulu temiz ve sıralı bir şekilde listeleme imkanı verir.

### Basit CASE ile Arama CASE

`CASE` ifadesi, her biri belirli senaryolar için tasarlanmış iki varyantta sunulur.

- **Simple CASE:** Tek bir sütun üzerinde doğrudan eşitlik karşılaştırmaları yapmanız gerektiğinde mükemmeldir. Sözdizimi kompakt ve temizdir, sayısal bir durum kodunu (1, 2, 3) metin etiketlerine ("Aktif", "Pasif", "Askıya Alınmış") dönüştürmek gibi kesin değerleri eşlemek için idealdir.
- **Searched CASE:** Burada maksimum esneklik elde edersiniz. Her `WHEN` koşulu kendi başına bir boolean ifadedir. Birden fazla sütun, `AND` ve `OR` gibi mantıksal operatörler ve karmaşık karşılaştırmalar (`>`, `<`, `<>`) kullanabilirsiniz. Bu, **SQL'de if-else if** mantığının gerçek vücut bulmuş halidir.

Pratikte, %90 oranında kullanacağınız şey `Searched CASE`'dir. Bu, harcama _ve_ satın alma sıklığına göre müşterileri segmentlere ayırmak gibi karmaşık iş kurallarını doğrudan sorgunuzun içine çevirmenizi sağlayan araçtır.

### Başlıca SQL lehçelerinde pratik örnekler

`Searched CASE`'i klasik bir görev için nasıl kullanacağımızı görelim: ürünleri fiyata göre kategorize etmek. Sözdiziminin ana diyalektler arasında neredeyse aynı olduğunu fark edeceksiniz, bu da inanılmaz taşınabilirliğinin bir kanıtıdır.

**MySQL/PostgreSQL/SQL Server örneği:**

`SELECTnome_prodotto,prezzo,CASEWHEN prezzo > 1000 THEN 'Premium'WHEN prezzo > 100 AND prezzo <= 1000 THEN 'Fascia Media'ELSE 'Economico'END AS categoria_prezzoFROM Prodotti;`

Bu kod ne yapıyor? `Prodotti` tablosundaki her satırı analiz eder. Eğer `prezzo` 1000'i aşıyorsa, 'Premium' etiketini atar. Eğer öyle değilse, bir sonraki koşula geçer: 'Fascia Media' atamak için 100 ile 1000 arasında olup olmadığını kontrol eder. Her iki koşul da doğru değilse, `ELSE` koşulu bir paraşüt gibi devreye girerek 'Economico' atar.

`CASE`'in benimsenmesi İtalyan BT sektöründe önemli ölçüde arttı. Bir pazar analizi, KOBİ'ler tarafından `CASE`'i kullanan karmaşık sorguların 2020 ile 2025 arasında %**45** arttığını gösterdi. ASSINT'in 2023 raporu ayrıca İtalyan geliştiricilerin %**68**'inin `CASE`'i tercih ettiğini ortaya koydu, çünkü daha karmaşık alternatif mantıklara kıyasla hataları %**32** azaltıyor. AI destekli veri analitiği platformumuz Electe'de de bu yapılar raporları otomatikleştirmek için temel öneme sahip ve müşterilerimiz için işlem sürelerini %60 kısaltıyor.

Ancak `CASE` kullanmayı öğrenmek `SELECT` ile sınırlı kalmıyor. Onu `WHERE`, `ORDER BY` ve hatta `GROUP BY` gibi ifadelere entegre ederek dinamik filtreler, sıralamalar ve toplamalar oluşturabilir, sorgularınızı daha da akıllı ve esnek hale getirebilirsiniz. Daha da derinlemesine incelemek isterseniz, [SQL'de CASE WHEN hakkındaki detaylı rehberimizi](https://www.electe.net/post/case-when-sql) incelemenizi öneririm.

Farklı veritabanlarında sorunsuz çalışan kod yazmanıza yardımcı olmak için, en yaygın SQL lehçeleri arasındaki küçük ama önemli sözdizimsel farklılıkları özetleyen bir tablo hazırladık.

### Başlıca SQL lehçelerinde CASE sözdiziminin karşılaştırılması

ÖzellikMySQLSQL ServerPostgreSQLSearched CASE (`CASE WHEN ... END`)DesteklenirDesteklenirDesteklenirSimple CASE (`CASE col WHEN ... END`)DesteklenirDesteklenirDesteklenirAlternatif ikili fonksiyon`IF(cond, vero, falso)IIF(cond, vero, falso)`Mevcut değil, `CASE` kullanın`THEN`/`ELSE` dallarında tip yönetimiEsnek, otomatik zorlamaKısıtlayıcı, aynı veya örtük olarak dönüştürülebilir tiplerKısıtlayıcı, uyumlu tipler zorunlu`ELSE` ifadesi atlanırsa`NULL` döndürür`NULL` döndürür`NULL` döndürür

Her üç veritabanı — **MySQL**, **SQL Server (T-SQL)** ve **PostgreSQL** — hem Searched CASE hem de Simple CASE'i aynı standart sözdizimiyle destekler: `CASE WHEN ... END`.

**Alternatif fonksiyonlar** konusunda, MySQL `IF(cond, true, false)` sunar ve SQL Server `IIF(cond, true, false)`'a sahiptir. PostgreSQL'in `IIF`'e denk gelen doğrudan bir fonksiyonu yoktur ve her durumda `CASE` kullanılmasını gerektirir.

**Tip yönetimi** konusunda, MySQL üçü arasında en esnek olanıdır. SQL Server daha kısıtlayıcıdır: `THEN` ve `ELSE` dallarındaki tüm sonuçlar aynı veri tipinde olmalı veya örtük olarak dönüştürülebilir olmalıdır. PostgreSQL de kısıtlayıcıdır ve `CASE`'in tüm dalları arasında uyumlu veri tipleri gerektirir.

Gördüğünüz gibi, temel sözdizimi sağlam ve standartlaştırılmıştır. Farklılıklar esas olarak alternatif işlevlerde ve veri türlerinin yönetiminde ortaya çıkar; bu, heterojen sistemlerde çalışacak sorgular yazarken göz ardı etmemeniz gereken bir ayrıntıdır. Bu nüansları akılda tutmak sizi pek çok baş ağrısından kurtaracaktır.

## Basit ikili koşullar için IF ve IIF'yi seçin

Elbette, `CASE` ifadesi karmaşık mantıkları yönetmek için İsviçre çakısıdır, ama ayrım basit olduğunda, iki seçenek arasında net bir tercih söz konusu olduğunda ne olur? Bu tür saf "if-else" senaryoları için, bazı SQL diyalektleri size daha doğrudan ve sade alternatifler sunar.

Bunları kısayollar olarak düşünün. Sadece iki sonucu yönetmek için tam bir `CASE` bloğu oluşturmak yerine, kodu daha kompakt ve -itiraf edelim- ilk bakışta okunması daha kolay hale getiren tek bir fonksiyon kullanabilirsiniz.

### MySQL'de IF işlevi

**MySQL**, tam olarak vaat ettiğini yapan `IF()` fonksiyonunu sunar: üç argüman kabul eder ve başka bir şey istemez.

1. Doğrulanacak koşul.
2. Doğruysa döndürülecek değer.
3. Yanlışsa döndürülecek değer.

Sözdizimi son derece temizdir: `IF(koşul, doğruysa_değer, yanlışsa_değer)`.

Pratik bir örnek yapalım. Platformunuzdaki kullanıcıları son giriş tarihlerine göre hızlıca 'Aktif' veya 'Pasif' olarak etiketlemek istiyorsunuz. `IF` ile iş tamam:

`SELECTnome_utente,IF(last_login > '2023-01-01', 'Attivo', 'Inattivo') AS stato_utenteFROM Utenti;`

Bunun eşdeğer bir `CASE`'den daha kısa olduğuna şüphe yok. Nitekim sektör verileri açık konuşuyor: `IF(condition, true, false)` kullanımı 2019'dan bu yana İtalyan KOBİ'leri arasında **%52** arttı.

Konuyu daha derinlemesine incelemek istersen, [SQL koşullu ifadeleri hakkında daha fazla ayrıntı](https://support.workiva.com/hc/it/articles/360042533552-Espressioni-condizionali-SQL) bulabilirsin.

### SQL Server'da IIF işlevi

**SQL Server** da geride kalmıyor ve neredeyse aynı işlevi sunuyor: `IIF()` (_Immediate IF_ anlamına gelir). İşleyişi MySQL'deki `IF()` ile aynıdır, aynı mantık, aynı sözdizimi.

Öyleyse, önceki örneği tekrar ele alırsak, SQL Server için şunu yazacağız:

`SELECTnome_utente,IIF(last_login > '2023-01-01', 'Attivo', 'Inattivo') AS stato_utenteFROM Utenti;`

Bu infografik, yapman gereken karşılaştırma türüne göre `Simple CASE` ve `Searched CASE` arasında seçim yapma sürecini görselleştirmene yardımcı olur.

Temel kavram basittir: tek bir değeri eşitlik açısından kontrol ediyorsan, `Simple CASE` daha temizdir. Diğer tüm mantıklar için doğru seçim `Searched CASE`'dir.

**IF/IIF ne zaman kullanılır?** İkili, açık ve basit koşullar için hiç düşünmeden kullan. Ama dikkat: mantığın bir "elseif" gerektirmeye başladığı anda hemen `CASE`'e geri dön. Kodu zaman içinde okunabilir ve bakımı kolay tutmak için her zaman en iyi seçimdir.

Her lehçeye özgü bu alternatifleri bilmek, sadece doğru değil, aynı zamanda kullandığınız platform için optimize edilmiş kod yazmanızı sağlar. Bu, güç ve basitlik arasında mükemmel bir dengedir.

## Koşullu mantığı uygulamaya koymak: gerçek hayattan örnekler

SQL'deki koşullu ifadelerin gerçek gücü, somut iş problemlerine uygulandığında ortaya çıkar. Teorinin eyleme dönüştüğü nokta tam olarak burasıdır. `IF`, `ELSE` ve özellikle `CASE WHEN`'in nasıl basit komutlar olmaktan çıkıp, doğrudan veritabanı içinde ham veriyi stratejik içgörülere dönüştürebilen araçlar haline geldiğini görelim.

Pazarlamadan veri yönetimine kadar, her veri analistinin veya geliştiricinin er ya da geç karşılaştığı dört senaryoyu inceleyeceğiz; iyi yapılandırılmış bir `CASE WHEN`'in karmaşık görevleri nasıl otomatikleştirebileceğini ve anında yanıtlar sağlayabileceğini göstereceğiz.

### Dinamik müşteri segmentasyonu

Daha etkili pazarlama kampanyaları başlatmak için müşterilerini segmentlere ayırmak istediğini hayal et. Geleneksel yaklaşım mı? Her şeyi bir elektronik tabloya aktarıp formüller ve filtrelerle uğraşmaya başlamak. Ama çok daha akıllı bir yol var: dinamik segmentleri doğrudan `SELECT` sorgunda oluşturmak.

Bu teknik, her müşteriyi toplam harcama tutarı veya son sipariş tarihi gibi satın alma davranışlarına göre sınıflandırmanıza olanak tanır. Bu, en iyi müşterileri, sadık müşterileri ve tersine sizi terk etme riski taşıyan müşterileri bir bakışta tespit etmenin son derece etkili bir yoludur.

**Pratik örnek:**

`SELECTID_Cliente,Nome,Spesa_Totale,Ultimo_Acquisto,CASEWHEN Spesa_Totale > 5000 AND Ultimo_Acquisto >= '2023-10-01' THEN 'Cliente Premium'WHEN Spesa_Totale > 1000 THEN 'Cliente Fedele'WHEN Ultimo_Acquisto < '2023-01-01' THEN 'Cliente a Rischio'ELSE 'Cliente Occasionale'END AS Segmento_ClienteFROM Clienti;`

Tek bir sorguyla verilerin, pazarlama ve müşteri elde tutma stratejilerin için temel önem taşıyan bir bağlamla zenginleşir. Bu, sadece bir veri deposu değil, işletme için gerçekten faydalı bir [ilişkisel veritabanı örneği](https://www.electe.net/post/esempio-di-database) oluşturmanın temel taşlarından biridir.

### Verilerin temizlenmesi ve standartlaştırılması

Veri kalitesi her şeydir. Temiz veri olmadan, her analiz potansiyel olarak yanlıştır. Ne yazık ki, elle girilen veriler çoğu zaman bir felakettir: tutarsız, yazım hatalarıyla dolu veya farklı şekillerde biçimlendirilmiş. Bir `UPDATE` ifadesinde koşullu mantık kullanmak, tek bir komutla tüm veri setlerini temizlemene ve standartlaştırmana olanak tanır.

Bu yaklaşım, binlerce kaydı manuel olarak düzeltmekten sadece daha verimli olmakla kalmaz; aynı zamanda tam anlamıyla bir kurtarıcıdır. Verilerinizin tutarlılığını sağlar ve nihayet güvenilir analizler için hazır hale getirir.

**Pratik örnek:**

`UPDATE IndirizziSETStato = CASEWHEN Stato IN ('NY', 'New York', 'new-york') THEN 'New York'WHEN Stato IN ('CA', 'California', 'cali') THEN 'California'ELSE Stato -- Lascia invariati gli altri statiENDWHEREPaese = 'USA';`

### Karmaşık prim hesaplamaları

Değişken ücretlerin hesaplanması genellikle baş ağrıtıcı bir iştir. Bu hesaplama binlerce faktöre bağlıdır: satış performansı, hizmet süresi, ekip hedeflerine ulaşma durumu. Bu karmaşık kuralları harici komut dosyalarıyla ya da daha da kötüsü Excel'de yönetmek yerine, bunları bir SQL saklı yordamına dönüştürebilirsiniz.

Bu, iş mantığını tek bir merkezde toplamakla kalmaz, aynı zamanda hesaplamaların tutarlı ve güvenli bir şekilde yapılmasını sağlar; böylece manuel hata riskini azaltır ve şeffaflığı garanti eder.

Bir saklı yordam (stored procedure), bir çalışanın ID'sini girdi olarak alabilir ve veritabanında zaten mevcut olan performans verilerine dayalı karmaşık bir `if else if` mantığı uygulayarak tam bonus tutarını döndürebilir.

**Mantık örneği (T-SQL'de):**

`CREATE PROCEDURE CalcolaBonusDipendente@ID_Dipendente INTASBEGINDECLARE @AnniServizio INT;DECLARE @VenditeAnnuali DECIMAL(10, 2);DECLARE @Bonus DECIMAL(10, 2);SELECT @AnniServizio = Anni_Servizio, @VenditeAnnuali = Vendite_2023FROM PerformanceDipendenti WHERE ID_Dipendente = @ID_Dipendente;IF @VenditeAnnuali > 100000SET @Bonus = @VenditeAnnuali * 0.10; -- 10% bonus per top performerELSE IF @VenditeAnnuali > 50000 AND @AnniServizio > 5SET @Bonus = @VenditeAnnuali * 0.07; -- 7% per senior con buone venditeELSESET @Bonus = @VenditeAnnuali * 0.05; -- 5% bonus standard-- Logica per aggiornare la tabella o restituire il valoreSELECT @Bonus AS Bonus_Calcolato;END;`

### Esnek raporlar oluşturma

Son olarak, koşullu mantık raporlarını inanılmaz derecede dinamik hale getirebilir. `COUNT` veya `SUM` gibi toplama fonksiyonları içinde `CASE` kullanarak, tabloyu tek bir kez tarayarak karmaşık metrikler oluşturabilirsin.

Örneğin, tek bir sorguda farklı kategorilerdeki siparişleri sayabilir, bölgelere göre satışları toplayabilir ve bekleyen siparişlerin toplamını hesaplayabilirsiniz. Bu, her bir metrik için ayrı sorgular çalıştırma ihtiyacını ortadan kaldırarak raporlama komut dosyalarını çok daha hızlı ve bakımı kolay hale getirir.

**Pratik örnek:**

`SELECTCOUNT(CASE WHEN Stato = 'Spedito' THEN 1 END) AS Ordini_Spediti,COUNT(CASE WHEN Stato = 'In Attesa' THEN 1 END) AS Ordini_In_Attesa,SUM(CASE WHEN Regione = 'Nord' THEN Totale END) AS Vendite_Nord,SUM(CASE WHEN Regione = 'Sud' THEN Totale END) AS Vendite_SudFROM Ordini;`

## NULL değerlerini yönetme ve performansı optimize etme

İşe yarayan bir koşullu mantığa sahip olmak işin yalnızca yarısıdır. Gerçekten etkili olabilmesi için sağlam ve her şeyden önce hızlı olması da gerekir. Analizlerini altüst edebilecek en yaygın iki engel, **NULL** değerlerinin yönetimi ve çalışması sonsuza kadar süren sorgulardır.

NULL değerleri SQL'de garip bir canavardır. `NULL` ile yapılan herhangi bir doğrudan karşılaştırma (`sütun = NULL` veya `sütun <> NULL` gibi) ne doğru ne de yanlış döndürür; bunun yerine üçüncü bir durum döndürür: `UNKNOWN`. Görünüşte zararsız olan bu davranış, `if else if in sql` mantığında gerçek kara delikler yaratabilir, dahil ettiğinden emin olduğun satırları dışarıda bırakabilir ve sonuçlarını yanıltabilir.

### NULL değerlerini proaktif bir şekilde yönetmek

Bu tuzağa düşmemek için tek bir çözüm var: NULL değerleri açık ve önceden yönetmek. Parmaklarını çaprazlayıp verilerin temiz olmasını ummak yerine, doğrudan `CASE` veya `IF` ifadelerinin içinde belirli fonksiyonlar kullanabilirsin.

Cephanendeki en etkili iki silah `COALESCE` ve `ISNULL`'dır.

- `COALESCE(sütun, varsayılan_değer)`: Bu, ANSI-SQL standart fonksiyonudur; yani hemen hemen her yerde bulacaksın. Argüman listesinde karşılaştığı ilk NULL olmayan değeri döndürür. Koşullu mantığın devreye girmeden önce bir `NULL` değerini sıfır veya 'N/D' gibi güvenli bir alternatifle anında değiştirmek için mükemmeldir.
- `ISNULL(sütun, varsayılan_değer)`: [SQL Server](https://www.microsoft.com/it-it/sql-server) gibi lehçelere özgüdür ve yalnızca iki argüman kullandığında `COALESCE` ile temelde aynı şeyi yapar. Ancak dikkat et, çünkü veri türlerini yönetme biçiminde küçük ama önemli farklar vardır.

Bu fonksiyonları entegre ederek mantığın `NULL` değerlerine karşı dayanıklı hale gelir. Basit ve etkili.

NULL değerlerini yönetmek için doğru işlevi seçmek, kodun taşınabilirliği ve performans açısından büyük fark yaratabilir.

### NULL değerlerini yönetmeye yönelik işlevlerin karşılaştırması

_SQL lehçesine ve belirli kullanım durumuna göre COALESCE, ISNULL ve NULLIF arasında seçim yapmak için pratik örneklerle hızlı bir rehber._

**COALESCE**, bir argüman listesinden ilk NULL olmayan değeri döndürür. Tüm önemli lehçeler tarafından desteklenen en esnek ve çok yönlü fonksiyondur: SQL Server, PostgreSQL, Oracle, MySQL ve SQLite. Tipik bir kullanım örneği, iş e-postası, kişisel e-posta ve bir yedek değer arasından ilk kullanılabilir e-postayı döndürmektir: `SELECT COALESCE(email_lavoro, email_personale, 'Nessuna email') FROM utenti`.

**ISNULL**, bir NULL değerini belirtilen bir alternatifle değiştirir. Yalnızca 2 argüman kabul ettiği için COALESCE'den daha az esnektir ve yalnızca SQL Server ve T-SQL'de mevcuttur. Pratik bir örnek, indirimli fiyat mevcut olmadığında liste fiyatını döndürmektir: `SELECT ISNULL(prezzo_scontato, prezzo_listino) FROM prodotti`.

**NULLIF**, iki ifade eşitse NULL döndürür, aksi takdirde ilkini döndürür. Sıfıra bölmeyi önlemek için özellikle kullanışlıdır ve SQL Server, PostgreSQL, Oracle ve MySQL tarafından desteklenir. Temsili bir örnek, sıfıra bölmeye karşı koruma sağlayarak sipariş başına ortalamayı hesaplamaktır: `SELECT vendite_totali / NULLIF(numero_ordini, 0) AS media_ordine FROM report`.

Özetle, `COALESCE` neredeyse her zaman en güvenli ve taşınabilir seçimdir. Yalnızca SQL Server üzerinde çalışıyorsan ve sözdizimini tercih ediyorsan `ISNULL`'ı kullan, matematiksel hataları önlemek gibi belirli durumlar için `NULLIF`'i de hazırda tut.

### Koşullu sorguların performansını optimize etme

Özellikle bir `WHERE` ifadesine sıkıştırılmış koşullu mantık, sorgularının gerçek bir el freni haline gelebilir. Bazen, veritabanının kullanabileceği indeksleri kullanmasını engelleyerek onu tam tablo taramasına zorlar ve her şeyi yavaşlatır.

Bir sorgu hızlı olmadığı sürece "bitmiş" sayılmaz. `CASE` koşullarını optimize etmek isteğe bağlı bir işlem değil, sistemi yormayan profesyonel düzeyde SQL kodu yazmanın temel bir parçasıdır.

İşte sorgularınızın sadece doğru değil, aynı zamanda hızlı da olmasını sağlamak için birkaç pratik ipucu:

1. **WHEN **`koşullarını olasılığa göre sırala`: Daha sık gerçekleşen koşulları her zaman önce koy. Veritabanı motoru bulduğu ilk doğru koşulda durur. Bu küçük ayrıntı, özellikle çok büyük tablolarda yapması gereken işi büyük ölçüde azaltabilir.
2. **İfadeleri basit tut**: `WHEN` ifadeleri içinde karmaşık fonksiyonlar veya alt sorgulardan kaçınmaya çalış. Her satır değerlendirilmelidir ve koşul ne kadar karmaşıksa o kadar uzun sürer. Basitlik performans açısından her zaman kazandırır.
3. **WHERE **`ifadesine dikkat et`: Bu altın bir kuraldır. `WHERE` ifadesinde indekslenmiş bir sütuna fonksiyon uygulamak (örneğin, `WHERE YEAR(data_ordine) = 2023`) bir indeksi "öldürmenin" en yaygın yollarından biridir. Mümkünse sütunları "temiz" tutmak ve dönüşümleri karşılaştırmanın sağ tarafına uygulamak çok daha iyidir (`WHERE data_ordine >= '2023-01-01' AND data_ordine < '2024-01-01'`).

## Sözden eyleme: SQL mantığı için çıkarabileceğiniz dersler

Teori çok önemlidir, ancak asıl başarı sahada elde edilir. Bilgileri gerçek beceriye dönüştürmek için, sadece doğru değil, aynı zamanda verimli, okunabilir ve geleceğe dönük koşullu kod yazmanıza yardımcı olacak ipuçları aşağıda yer almaktadır.

- **Taşınabilirlik için her zaman **`CASE`**'e güven**. ANSI-SQL standardı olduğu için veritabanlarının ortak dilidir. Mantığında ikiden fazla olası sonuç varsa, `CASE` bir seçenek değildir: kodunu sağlam ve platformdan bağımsız hale getiren tercihtir. Gelecek için bir yatırımdır.
- `IF`**/**`IIF`**'i yalnızca basitlik için seç (ve mümkünse)**. Bu fonksiyonlar ikili (doğru/yanlış) koşullarda kompakt sözdizimleri sayesinde harikadır. Ama mantık karmaşıklaştığı ve bir "aksi halde eğer..."e ihtiyaç duyduğun anda, bunları hemen bırak ve `CASE`'in netliğine ve ölçeklenebilirliğine geri dön.
- `NULL`** değerlerini her zaman öngör**. Yönetilmeyen bir `NULL` değeri sonuçlarını yanıltabilir. Her zaman `COALESCE` veya `IS NULL` kontrolleriyle açık bir yönetim ekle. Bu, emniyet kemeri takmak gibidir: belki her zaman gerekmez ama gerektiğinde seni kurtarır.
- **Her zaman bir **`ELSE`** ekle**. Bir `CASE` içinde `ELSE` ifadesini atlamak, beklenmedik sonuçlara kapı açık bırakmak gibidir (`NULL` döndürür). Bir `ELSE` eklemek, sorgunun davranışını öngörülebilir kılar ve seni kötü sürprizlerden korur.
- **Koşulların sırasını optimize et**. En olası koşulları her zaman `CASE` bloğunun başına koy. SQL motoru doğru olan ilk koşulda durur. Milyonlarca satırlı tablolarda bu küçük ayrıntı sorgularını önemli ölçüde hızlandırabilir.

Bu ilkeleri tutarlı bir şekilde uygulayarak artık yalnızca sorgu yazmıyor olacaksın. Zamanın ve kusurlu verilerin sınavına dayanabilecek sağlam bir [iş zekası çözümü](https://www.electe.net/post/software-business-intelligence) tasarlıyor olacaksın.

## Sonuçlar: Verilerinizi kararlara dönüştürün

Doğrudan bir `IF ELSE IF` komutu bulunmamasına rağmen, SQL'in çok daha güçlü ve esnek araçlar sunduğunu gördün. `CASE WHEN` ifadesi, sorgularda doğrudan karmaşık iş mantıkları uygulamanı sağlayan evrensel bir standart olan ana kaynağındır. Daha basit durumlar için, `IF` ve `IIF` gibi fonksiyonlar daha sade bir sözdizimi sunar.

Bu teknikleri ustaca kullanmak, verileri basit kayıtlardan stratejik içgörülere dönüştürmek, müşteri segmentleri oluşturmak, verileri temizlemek ve dinamik raporları verimli ve ölçeklenebilir bir şekilde hazırlamak anlamına gelir.

Artık bir sonraki adıma geçmeye hazırsınız. Verilerinizi sadece sorgulamakla kalmayın, onları konuşturun. Daha akıllı yanıtlar elde etmek ve daha iyi iş kararları almak için bu koşullu mantıkları uygulamaya bugün başlayın.

Tek satır kod yazmadan verilerini rekabet avantajına dönüştürmeye hazır mısın? [Electe'nin ücretsiz bir demo ile verilerine nasıl anlam kazandırabileceğini keşfet](https://www.electe.net).
