SQL DECODE() Fonksiyonu Nasıl Kullanılır
SQL DECODE() fonksiyonu Oracle veritabanında yerleşik olarak desteklenir ve PL/SQL diyalektinde mevcuttur. DECODE() fonksiyonu, sorgu içinde koşullu mantığın uygulanmasına olanak tanır. Bu teknik, veriler veritabanından çekilirken dönüşüme yardımcı olduğu için önemlidir.
department_id sütununun sayısal değerler içerdiği aşağıdaki employees tablosunu düşünün. Bunun yerine, department_id’nin department_name olarak adlandırılmasını ve daha anlaşılır kategorilere sahip olmasını istiyoruz.

SQL DECODE() fonksiyonu kullanılarak dönüştürülecek örnek tablo. Görsel: Yazar.
Aşağıdaki örnek, DECODE() fonksiyonunun department_id değerlerini gerçek isimlere dönüştürmek için nasıl kullanılacağını göstermektedir.
-- Using DECODE to transform department_id to department_name
SELECT
employee_id,
first_name,
last_name,
DECODE(department_id,
1, 'IT',
2, 'HR',
3, 'Finance',
4, 'Marketing',
5, 'Sales',
'Unknown') AS department_name,
salary,
hire_date,
city
FROM employees;

SQL DECODE() fonksiyonu kullanıldıktan sonra örnek çıktı tablosu. Görsel: Yazar.
SQL DECODE() Fonksiyonunu Anlama
DECODE() fonksiyonu Oracle veritabanında mevcuttur ve bir sütunu koşullu mantıkla dönüştürmenize olanak tanır. DECODE() fonksiyonu, tek bir basit sorguda birden fazla koşullu dönüşüm sağlar.
DECODE() fonksiyonunun sözdizimi aşağıda gösterildiği gibidir:
DECODE(expression, search1, result1, search2, result2, ..., default)
Burada:
-
expression: Karşılaştırılacak değer. -
search: İfadenin karşılaştırılacağı değer. -
result: İfade aranan değerle eşleşirse döndürülecek değer. -
default: Eşleşme bulunamazsa döndürülecek değer (isteğe bağlı).
SQL DECODE() Fonksiyonu ile İleri Düzey Teknikler ve Dikkat Edilecek Noktalar
Bazı ileri SQL işlemleri DECODE() fonksiyonu kullanılarak gerçekleştirilebilir. Bu teknikler, daha karmaşık koşullu mantık dönüşümlerine olanak tanır.
Toplama fonksiyonlarıyla DECODE()
Oracle’daki DECODE() fonksiyonu, bir değişkeni yeniden kategorize etmek için SELECT ifadesinde kullanılabildiği gibi, daha karmaşık bir gruplayama için toplama fonksiyonlarıyla birlikte SELECT ifadesinde de kullanılabilir; bu da sonuçların esnekliğini ve yorumlanmasını artırır.
Aşağıdaki sorguda, department_id değerini department_name’e dönüştürmek için DECODE() kullanıyoruz. Ayrıca ortalama maaşı ‘High Paying’ veya 'Low Paying' olarak kategorize etmek için de DECODE() kullanıyoruz.
SELECT
department_id,
-- Use DECODE to transform department_id into department_name
DECODE(
department_id,
1, 'IT',
2, 'HR',
3, 'Finance',
4, 'Marketing',
5, 'Sales',
'Unknown'
) AS department_name,
SUM(salary) AS total_salary,
-- Calculate the average salary for each department and round to nearest integer
ROUND(AVG(salary), 0) AS average_salary,
-- Use DECODE to categorize average salary into 'High Paying' or 'Low Paying'
DECODE(
SIGN(AVG(salary) - 65000),
1, 'High Paying',
0, 'High Paying',
-1, 'Low Paying'
) AS salary_category
FROM
employees
GROUP BY
department_id;

Birden fazla SQL DECODE() fonksiyonu kullanıldıktan sonra örnek tablo çıktısı. Görsel: Yazar
İç içe DECODE() ifadeleri
DECODE() fonksiyonunu alt sorgularla uygulamak, veriler üzerinde gelişmiş koşullu mantık dönüşümleri yapmanızı sağlar. Oracle’daki iç içe DECODE() ifadesi, bir tabloda birden fazla koşulu değerlendirmek istediğimizde yardımcı olur.
Aşağıdaki örnekte, çalışanları departman ve maaşlarına göre kategorize etmek için iç içe DECODE() ifadesini kullandık.
-- Select the columns
SELECT
employee_id,
first_name,
last_name,
department_id,
salary,
-- Use DECODE to categorize salary based on department and salary thresholds
DECODE(department_id,
1, DECODE( -- If department_id is 1 (IT)
CASE
WHEN salary > 65000 THEN 'High'
ELSE 'Low'
END,
'High', 'IT High Salary',
'Low', 'IT Low Salary'
),
2, DECODE( -- If department_id is 2 (HR)
CASE
WHEN salary > 55000 THEN 'High'
ELSE 'Low'
END,
'High', 'HR High Salary',
'Low', 'HR Low Salary'
),
3, DECODE( -- If department_id is 3 (Finance)
CASE
WHEN salary > 70000 THEN 'High'
ELSE 'Low'
END,
'High', 'Finance High Salary',
'Low', 'Finance Low Salary'
),
4, DECODE( -- If department_id is 4 (Marketing)
CASE
WHEN salary > 68000 THEN 'High'
ELSE 'Low'
END,
'High', 'Marketing High Salary',
'Low', 'Marketing Low Salary'
),
5, DECODE( -- If department_id is 5 (Sales)
CASE
WHEN salary > 60000 THEN 'High'
ELSE 'Low'
END,
'High', 'Sales High Salary',
'Low', 'Sales Low Salary'
),
'Unknown Department' -- Default value if department_id does not match any case
) AS salary_category
FROM
employees;

İç içe DECODE() fonksiyonu kullanıldıktan sonra örnek tablo çıktısı. Görsel: Yazar
DECODE() NULL değerleri nasıl işler
DECODE() fonksiyonu NULL değerleri iki açıdan farklı şekilde ele alır. Öncelikle, DECODE() iki NULL değeri eşdeğer kabul eder. Bu işlevsellik, sütun değerleri NULL ile karşılaştırıldığında NULL değerlerin eşleşme sayılacağı anlamına gelir. Yine de, dönüşüm sırasında NULL değerleri maskeleyebileceği için, NULL açıkça hesaba katılmadığında beklenmedik sonuçlara karşı dikkatli olmalısınız.
Ayrıca, tıpkı CASE WHEN ifadesinde olduğu gibi, DECODE() fonksiyonunun da eşleşme bulunamazsa NULL değer döndürdüğünü bilmelisiniz.
Aşağıdaki örnek, department_id ve salary eksik olduğunda DECODE() fonksiyonunun nasıl null değerler döndürdüğünü gösterir.
-- Select columns
SELECT
employee_id,
first_name,
last_name,
department_id,
salary,
-- Determine the salary category based on the salary value
DECODE(salary,
NULL, 'No Salary Information',
60000, 'Standard Salary',
'Other Salary') AS salary_category,
-- Determine the department name based on the department ID
DECODE(department_id,
1, 'IT',
2, 'HR',
3, 'Finance',
4, 'Marketing',
5, 'Sales') AS department_name
-- If department_id does not match any of the above, return NULL
FROM
employees;

NULL değerleri ele almak için DECODE() kullanıldıktan sonra örnek tablo çıktısı. Görsel: Yazar
Oracle’da DECODE ve CASE WHEN
İlk tanıtılan fonksiyon DECODE() olsa da, CASE WHEN ifadesi tarafından büyük ölçüde ikame edilmiştir; yine de bazı bağlamlarda tercih edilir. Örneğin, DECODE() fonksiyonunun sözdizimi daha basittir; dolayısıyla mantık yeterince basitse okumak ve anlamak daha kolaydır.
Ayrıca, DECODE() genellikle daha hızlıdır; çünkü yerleşik bir fonksiyon olarak performansı optimize edilmiştir, ancak fark önemsiz olabilir. Son olarak, eski Oracle sistemlerinde, yerleşik fonksiyon olarak DECODE() fonksiyonunu kullanmanız gerekebilir.
Diğer Veritabanlarında DECODE() Alternatifleri
DECODE() fonksiyonu yalnızca Oracle veritabanında desteklenir. Ancak SQL Server, PostgreSQL ve MySQL, koşullu veri dönüşüm mantığını uygulamak için alternatif yöntemler sunar.
DECODE() fonksiyonu, IF ELSE veya CASE ifadelerinin kullanımını ortadan kaldırarak karmaşık mantığı basitleştirdiği için veri dönüşümünde kullanışlıdır. DECODE() sorgu okunabilirliğini de artırır ve verilerin etkin biçimde işlenmesine olanak tanır. DECODE() fonksiyonunun farklı kullanım durumlarını inceleyelim.
SQL Server, PostgreSQL ve MySQL’de CASE WHEN kullanımı
CASE WHEN ifadesi, SQL’deki koşullu mantık dönüşümünü gerçekleştirmek için DECODE() fonksiyonuna bir alternatiftir. CASE WHEN sözdizimi ve uygulaması SQL Server, PostgreSQL ve MySQL veritabanlarında tutarlıdır.
Aşağıdaki örnek, verileri SELECT ifadesi içinde dönüştürmek için CASE WHEN ifadesinin nasıl kullanılacağını gösterir. Sorgu ayrıca, karmaşık koşullu dönüşümler için CASE WHEN ifadesinin diğer SQL fonksiyonlarıyla nasıl birleştirileceğini de gösterir.
-- Select department ID
SELECT
department_id,
-- Use CASE to transform department_id into department_name
CASE
WHEN department_id = 1 THEN 'IT'
WHEN department_id = 2 THEN 'HR'
WHEN department_id = 3 THEN 'Finance'
WHEN department_id = 4 THEN 'Marketing'
WHEN department_id = 5 THEN 'Sales'
ELSE 'Unknown'
END AS department_name,
SUM(salary) AS total_salary,
-- Calculate the average salary for each department and round to the nearest whole number
ROUND(AVG(salary), 0) AS average_salary,
-- Use CASE to categorize average salary into 'High Paying' or 'Low Paying'
CASE
WHEN AVG(salary) > 65000 THEN 'High Paying'
ELSE 'Low Paying'
END AS salary_category
FROM
employees
GROUP BY
department_id; -- Group results by department ID
Sonuç ve İleri Öğrenme
Oracle DECODE() fonksiyonunu anlamak, verileri etkili şekilde dönüştürmeyi öğrenirken önemlidir. DECODE() fonksiyonu, veri dönüşümü sırasında koşullu mantığın uygulanmasına yönelik çeşitli kullanım senaryoları sunar. SQL Server, PostgreSQL ve MySQL veritabanlarında alternatif koşullu dönüşümleri öğrenmeniz de önemlidir. DECODE() fonksiyonunu farklı veri kümeleri ve kullanım durumlarıyla uygulayarak veri dönüşümü becerilerinizi mükemmelleştirmenizi öneririm.
Veri analizi becerilerinizi geliştirmek istiyorsanız, analiz ve sunum becerilerinizi ilerletmek için DataCamp’in Reporting in SQL kursunu almanızı öneririm. Benzer şekilde, kariyerinizde ihtiyaç duyacağınız SQL konularındaki ilerlemenizi sürdürmenize yardımcı olmak için Associate Data Analyst in SQL kariyer yolumuza da göz atmalısınız. Son olarak, farklı SQL tekniklerini analiz ve raporlama için kullanmadaki ustalığınızı sergileyerek diğer veri analistleri arasında öne çıkmanızı sağlayacak DataCamp’in Data-Driven Decision Making in SQL projesini şiddetle tavsiye ederim.

Sıkça Sorulan Sorular
SQL DECODE() fonksiyonu nedir?
SQL DECODE(), veri dönüşümü için koşullu mantık uygulamakta kullanılan bir fonksiyondur.
Hangi veritabanları SQL DECODE() fonksiyonunu destekler?
SQL DECODE() fonksiyonunu yerleşik olarak yalnızca Oracle veritabanı destekler. SQL Server, PostgreSQL ve MySQL, CASE WHEN ifadesiyle koşullu dönüşüme izin verir.
DECODE()’u diğer SQL fonksiyonlarıyla kullanabilir miyim?
Oracle DECODE() fonksiyonu, ileri düzey koşullu dönüşümler gerçekleştirmek için AVG(), SUM() ve COUNT() gibi diğer SQL fonksiyonlarıyla birlikte kullanılabilir.
İç içe DECODE() ifadelerini kullanabilir miyim?
Oracle veritabanları, karmaşık mantık için iç içe DECODE() ifadelerini destekler. Ancak daha uzun iç içe DECODE() ifadeleri bakımı ve okunması zor hale gelebilir.
DECODE() fonksiyonu NULL değerleri işleyebilir mi?
DECODE() fonksiyonu varsayılan olarak NULL değerleri ele alır ve koşul veri dönüşümü sırasında karşılanmazsa NULL değer döndürür.
DECODE() dışında Oracle’a özgü başka hangi fonksiyonlar var?
Oracle veritabanına özgü diğer fonksiyonlara, NULL değerleri belirtilen değerlerle değiştiren NVL() örnek verilebilir.

Koşullu mantığı doğrudan SQL sorgularının içinde uygulamayı bilmek, veri bilimciler ve veri mühendisleri için gerekli bir beceridir. Bu öğretici, Oracle’da SQL
DECODE()fonksiyonunu kullanmaya yönelik kapsamlı bir rehber sunar. Ayrıca Oracle’daDECODE()ileCASE WHENkarşılaştırmasını yapacak ve her bir fonksiyonu ne zaman kullanmanız gerektiğini anlamanıza yardımcı olacağım. Son olarak, SQL Server, PostgreSQL ve MySQL’deki eşdeğer dönüşümler için kod da sağlayacağım.Pratik örneklere geçmeden önce, PL/SQL diyalektini kullanma becerilerinizi tazelemek için DataCamp’in Introduction to Oracle SQL kursunu almanızı öneririm. Ayrıca, Intermediate SQL kursumuz, çünkü göreceğimiz üzere
DECODE()sıklıkla alt sorgular gibi daha gelişmiş sözdizimiyle kullanıldığından,DECODE()fonksiyonu içeren sorguları işlerken gerekli olan ileri SQL becerilerini edinmenizi sağlayacaktır.