Koşullu ifadeler, herhangi bir programlama paradigmasının en temel öğelerinden biridir. Yaygın koşullu ifadelere if-else blokları ve switch durumları örnek verilebilir. PostgreSQL'de koşullu ifadeleri, if-else bloklarına oldukça benzeyen WHEN-THEN yapısını kullanarak kurabilirsiniz. Bu eğitimde, bunu nasıl yapacağınızı öğreneceksiniz.
Koşullu sorgular yazmaya başlamadan önce, yerel bir PostgreSQL veritabanı kurmanız önemlidir. Bu eğitimin ilk bölümünde bunu yapacaksınız.
Not: Bu eğitimi takip edebilmek için SQL ve PostgreSQL'in temel bilgilerine sahip olmanız gerekir. Temelleri tazelemek isterseniz aşağıdaki kaynaklara göz atabilirsiniz:
Veritabanını kurmak için bu makaleyi takip edebilirsiniz. Yedeği başarıyla geri yükledikten sonra veritabanında şu tabloları görmelisiniz:
countries
route_table
station_table
train_table
Ancak bu eğitim yalnızca countries tablosunu kullanır. Veritabanı yedeğinde sunulan tabloları keşfetmekten çekinmeyin. Ayrıca kendi veritabanlarınızı ve tablolarınızı oluşturmak isteyebilirsiniz. Veritabanı yedeğini geri yüklediyseniz artık dünya genelindeki farklı ülkelerle ilgili ayrıntılarla doldurulmuş bir tablonuz olmalı. Şimdi countries tablosunu kısaca inceleyelim.
countries tablosunu kısaca keşfetme
Veritabanını geri yükledikten sonra, PostgreSQL'in varsayılan kurulumu ile gelen pgAdmin arayüzünde tabloyu görüntüleyebilirsiniz. Basit bir SELECT ifadesi çalıştırdığınızda sütunları, veri türlerini ve tablonun içerdiği satırları görebilirsiniz -
Tablo, dünyanın çeşitli bölgelerinden toplam 206 farklı ülkeye ait bilgileri içeriyor. Peki tam olarak kaç bölge var? Aşağıdaki sorgu bu sorunun cevabını verir.
SELECT COUNT(DISTINCT(region)) from countries;
Tabloda Batı Avrupa, Polinezya, Orta Doğu gibi 23 farklı bölgenin yer aldığı ortaya çıkıyor. Siz de kendi hızlı sorularınızla tabloyu keşfedebilir ve bu sırada ilginç bilgiler bulabilirsiniz. Şimdi temel bir PostgreSQL CASE ifadesinin yapısına bakalım.
PostgreSQL CASE'e giriş
Aşağıda, WHEN-THEN yapısına sahip genel bir PostgreSQL case biçimi açıklanmaktadır -
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
...
ELSE result_n
END
PostgreSQL'de CASE oluştururken aklınızda bulundurmanız gereken bazı kritik noktalar şunlardır:
Her koşul bir boole ifadesidir ve çıktısına göre sonuç seçilir. WHEN ile belirtilen tüm ifadeler False olarak değerlendirilirse, ELSE kısmına karşılık gelen sonuç gösterilir. ELSE kısmını belirtmezseniz sorgu null döndürür.
Bir koşul genellikle üzerinde işlem yaptığınız tabloda bulunan bir sütuna uygulanır. Yukarıdaki gibi koşullu sorgu yapıları genellikle SELECT ifadeleriyle yapılır. Şunu unutmayın: Boole ifadelerini (CASE içinde) belirttiğiniz sütun, sorgunuzun SELECT ifadesinde yer almalıdır. Ancak CASE'i bir where koşuluyla birlikte kullandığınızda bunu izlemeniz gerekmez (buna daha sonra değineceğiz).
Sonuçların veri türü tutarlı olmalıdır. result_1 içinde bir string, result_2 içinde ise bir integer döndüremezsiniz.
Şimdi bazı örneklere bakalım.
PostgreSQL CASE yazımı
Basitten başlayalım. Şimdi ülkeleri bağımsızlık yılına göre gruplandırmak için bir CASE yazacaksınız. Bağımsızlık yılları indep_year sütununda kayıtlıdır. Ülkelerin bağımsızlık yılları için takip etmeniz gereken üç grubunuz olduğunu varsayalım. Bunun için üç bağımsızlık yılı grubu oluşturacaksınız -
1900'den önce (indep_year < 1900)
1900 ile 1930 arasında (indep_year <= 1930)
1930'dan sonra (indep_year > 1930)
Sorgunun nihai sonucu aşağıdaki sütunları içermelidir -
name (ülkenin adı)
continent (ülkenin ait olduğu kıta)
indep_year
Ve oluşturacağınız bağımsızlık yılı grubu. Buna indep_year_group adını verelim.
Şimdi sorguyu yazalım -
SELECT name, continent, indep_year,
CASE WHEN indep_year < 1900 THEN 'before 1900'
WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
ELSE 'after 1930' END
AS indep_year_group
FROM countries
ORDER BY indep_year_group;
Sorguyu çalıştırdığınızda, tabloda bağımsızlık yılı belirtilmeyen Filistin, Porto Riko vb. gibi birçok ülke göreceksiniz. Bu nedenle between 1900 and 1930 grubuna girdiler.
PostgreSQL CASE ifadeleri birden fazla koşul içerebilir. Tabloda ülke adı ile başkentinin aynı olduğu az sayıda kayıt vardır. Bunu daha önce oluşturduğunuz CASE'e ekleyebilirsiniz -
SELECT name, continent, indep_year,
CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
ELSE 'after 1930_and_no_same_capital' END
AS indep_year_group
FROM countries
ORDER BY indep_year_group;
CASE ile ilgili bir başka ilginç özellik de SUM() gibi toplu (aggregate) fonksiyonlarla birlikte kullanılabilmesidir. SUM() ile bir CASE uygulamak için bunun uygun olacağı farklı bir tabloya ihtiyaç duyarsınız. Aşağıdaki sütunlar ve veri türlerine sahip student_grades adlı basit bir tablo oluşturalım -
student_name (string)
student_stream (string)
student_grade (character)
Aşağıdaki sorgu tabloyu sizin için oluşturur -
CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);
Şimdi tabloya bazı kayıtlar ekleyelim. Bunu birkaç INSERT ifadesi kullanarak yapabilirsiniz. Diyelim ki eklemelerden sonra student_grades tablosunda aşağıdaki kayıtlar var -
Şimdi, belirli not gruplarına ait öğrenci sayılarının toplamını almak için bir CASE yazacaksınız. Görüldüğü gibi, tablo örneklerine göre üç farklı not var: A, B ve C. Koşullu sorgu aşağıdakine benzer bir çıktı döndürmelidir -
Bunun için sorgu -
SELECT
SUM (
CASE
WHEN student_grade = 'A' THEN
1
ELSE
0
END
) AS "High Scoring",
SUM (
CASE
WHEN student_grade = 'B' THEN
1
ELSE
0
END
) AS "Mid Scoring",
SUM (
CASE
WHEN student_grade = 'C' THEN
1
ELSE
0
END
) AS "Low Scoring"
FROM
student_grades;
Veriler hakkında ilginç bilgiler elde etmek için CASE'i toplu fonksiyonlarla bu şekilde eşleştirebilirsiniz.
Sonuç ve ileri okuma
Bu eğitim bu kadar. Bu eğitimde, SQL sorgularınıza ilginç raporlamalarla sonuçlanan if-then benzeri koşullandırmayı nasıl dahil edeceğinizi öğrendiniz. Bu beceriyi pekiştirmek için birkaç örnek üzerinden çalıştınız. Daha zorlu alıştırmalar arıyorsanız, SQL üzerine aşağıdaki DataCamp kurslarını almalısınız -
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!