top of page

DECODE vs CASE

  • Yazarın fotoğrafı: Tuncay Tiryaki
    Tuncay Tiryaki
  • 19 May 2020
  • 2 dakikada okunur

Güncelleme tarihi: 19 May 2020

Decode ve Case arasındaki farklar!!!



Decode ve Case benzer işlemleri yapsa da Case'in yapabileceklerinin yanında Decode hiç dikkate bile alınmayabilir. Yani bu mücadelenin galibi baştan belli aslında!!!

Decode ya da Case, hangisi!!!

1) DECODE


Decode, bir kolon ya da ifadenin, verilen değerlerle karşılaştırmasını yapar ve yine verilen sonuçlardan birini döndürür. Aşağıdaki sorgu üzerinden giderek açıklarsak çok daha iyi olacak:


  • Pembe satır: Karşılaştırılacak olan kolondur. Bu kolonun (unvan) değerine bakılır

  • Karşılaştırma satırları 2' şerli yazılır. İlki değer, diğeri sonuçtur

  • Eğer ilgili değer için karşılaştırma yoksa else kısmına girer. Bu bölüm, en son kırmızı satırdır. Else kısmı yazılmak zorunda değildir. Eğer else yoksa ve ilgili değer bulunamamışsa bu fonksiyon null döner.

  • Mavi satır: Unvan değeri 'MÜHENDİS' ise maaşın %5 i hesaplanır

  • Yeşil satır: Unvan değeri 'UZMAN' ise maaşın %2 si hesaplanır

  • Kırmızı satır: Verilen değerlerden biri değilse maaşın %3 ü hesaplanır


select ad, soyad, unvan, maas, 
 decode
 (
   unvan, 
   'MÜHENDİS', maas*0.05,  
   'UZMAN',  maas*0.02, 
   maas*0.03
 ) kesinti
from personel

Bu SQL'de görüldüğü üzere DECODE, bir değerin sadece eşitlik kontrolünü sağlayabilir. Diğer kontrollerin hiçbirine sahip değildir. Örneğin, büyük, küçük, listenin içinde-dışında, birden fazla kolon değerini karşılaştırma gibi birçok kontrolü yapamaz. Oracle, bu fonksiyondan desteğini çekmiştir. Bunun yerine çok daha güçlü olan CASE ifadesini getirmiştir.


 

2) CASE


Decode fonksiyonunun yaptıklarının yanında birçok ekstra özelliği vardır. IF-THEN-ELSE yapısını kullanarak bir yazılım geliştiriyor gibi geniş çaplı kontroller koyabilirsiniz. Bir örnek ile açıklayalım:


Aşağıda görüldüğü üzere case-end arası bir kolonun değerini oluşturmaktadır. <, >, between operatörleri kullanılabilmiş ve istenilen değer oluşturulabilmiştir.


select maas,
 case
   when maas < 2000 then 'Düşük Maaş'
   when maas >= 2000 and maas <= 5000 then 'Orta Maaş'
   when maas > 5000 then 'Yüksek Maaş'
 end seviye
from personel

 

Başka bir örnek çözelim:


  • Birçok farklı alan üzerinde faklı operatörlerle (in, <, >, =) bir karşılaştırma yapılabiliyor

  • Sonuçta sot_turu isminde bir kolonun sayısal değeri oluşturuluyor. Değerler yeşil renkle gösterilmiştir

  • En altta bu şartlardan hiçbirinin geçerli olmadığı durumda üretilecek değer olan else kısmı yer almaktadır

  • nvl, substr gibi fonksiyonlar rahatlıkla kullanılabilmiştir


case
   when abone_durum in (2,3) then 68
   when hizmet_turu = '16' then 22
   when abone_turu = '10451' then 34
   when substr(abone_turu,1,1) in ('2','8') then 35
   when nvl(sot_tarih_grubu,0) = 2 then 89
   when abone_sayisi < 1000 then 45
   else 60
end sot_turu

Sonuç olarak, yukarıdaki son örnekte de görüldüğü Case ifadesinin üstünlüğü ve kabiliyetleri, Decode fonksiyonu ile karşılaştırılamaz bile. Ama yine de basit karşılaştırmalar için decode fonksiyonunu rahatlıkla kullanabilirsiniz.

Comments


logo-new.png
  • udemy-black
  • Siyah Instagram Simge
  • Siyah LinkedIn Simge
  • Siyah Facebook Simge

© 2020 dbHunter

bottom of page