SEO (Arama Motoru Optimizasyonu) Mikro İnteraktif ÜCRETSİZ - Google Play'den İndirin

SQL'de If Else Kullanımı

Çokca sorulan sorulardan birisi de SQL sorgularımız içerisinde if else koşul yapısının kullanımıdır.

Programlama dillerinin ortak özelliklerinden birisi de "Bunlar olunca şunları yap", "Gömleği mavi seçersem kravatı beyaz seç" gibi cümlelerin temelinde yatan koşul cümleleridir. SQL dilinde de bu yapıyı kullanmak mümkün.
Bu konuyu daha iyi anlamak için birkaç örnek üzerinde duralım.
Öncelik olarak kullanıcı tablosu oluşturalım.
tblKullanicilar (Kullanıcılar tablosu)
CREATE TABLE tblKullanicilar
(
kullanici_ID INT PRIMARY KEY NOT NULL IDENTITY(1,1),
ad VARCHAR(50),
soyad VARCHAR(50),
cinsiyet VARCHAR(1),
kullanici_adi VARCHAR(50),
tc_no CHAR(11),
dogum_tarihi DATE
)

Oluşturduğumuz tablo üzerinde işlem yapmak için birkaç kayıt ekleyelim.
Kullanıcı Verileri
INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Serkan', 'TOGAL', 'E', 'ontedi', '12345678901', '01.01.1980')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Asmin Nisa', 'TOGAL', 'K', 'asmin', '12312312322', '01.01.2014')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Ahmed İhsan', 'TOGAL', 'E', 'ahmed', '33344455566', '01.01.2016')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Yusuf Taha', 'FISTIK', 'E', 'yusuf', '55566677788', '01.02.2016')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Serkan', 'YENER', 'E', 'serkanyener', '91266677788', '11.12.2002')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Cansu', 'AHİ', 'K', 'cansuahi', '81366677738', '02.11.2002')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Serkan', 'KAYNAK', 'E', 'serkankaynak', '23466677738', '02.11.1999')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Tamer', 'TOKSÖZ', 'E', 'tamer', '23466667838', '02.03.1986')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Selçuk', 'DEMİR', 'E', 'selcukdemir', '93466667814', '12.09.1982')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Leyla', 'AY', 'K', 'leyla', '89866667814', '12.09.1991')

INSERT INTO tblKullanicilar(ad, soyad, cinsiyet, kullanici_adi, tc_no, dogum_tarihi)
VALUES
('Mustafa', 'MERT', 'E', 'mustafamert', '19203283832', '12.12.1996')

Tablo Oluştu
SQL'de If Else Kullanımı

Örnek 1
DECLARE @adiniz VARCHAR(50) = 'Serkan'

IF @adiniz IS NOT NULL
 SELECT * FROM tblKullanicilar WHERE ad = @adiniz

Örnek 1 Sonucu
SQL'de If Else Kullanımı

Örnek 2
DECLARE @adiniz VARCHAR(50) = 'Ahmed İhsan'
DECLARE @soyadiniz VARCHAR(50) = 'TOGAL'

IF (@adiniz IS NOT NULL) AND (@soyadiniz IS NOT NULL)
 SELECT * FROM tblKullanicilar WHERE ad = @adiniz AND soyad = @soyadiniz

Örnek 2 Sonucu
SQL'de If Else Kullanımı

Örnek 3
DECLARE @cinsiyet VARCHAR(1) = 'K'

IF @cinsiyet = 'K'
 SELECT * FROM tblKullanicilar WHERE cinsiyet = 'K'

Örnek 3 Sonucu
SQL'de If Else Kullanımı

Bu örneğimizde ise doğum tarihi boş olmayan ve 2015-01-01 tarihinden sonra doğmuş kişileri listeleyelim.

Örnek 4
DECLARE @dogum_tarihi DATE = '2015-01-01'

IF @dogum_tarihi IS NOT NULL
 SELECT * FROM tblKullanicilar WHERE dogum_tarihi > @dogum_tarihi

Örnek 4 Sonucu
SQL'de If Else Kullanımı

Sorgularımızı biraz daha ileri seviyeye taşıyalım. Mesela ad, soyad, cinsiyet, kullanici_adi, tc_no gibi ifadelerden herhangi birine ait değer var ise ona ait kritere göre arama sorgusunu yazalım. Parametrelerin varsayılan değerini NULL olarak atadık. Sizler onlara istediğiniz değeri vererek sorgumuzun nasıl çalıştığına dair fikir edinebilirsiniz.

DECLARE @ad VARCHAR(50) = NULL
olan parametre yerine
DECLARE @ad VARCHAR(50) = 'Serkan' olarak yaparsanız ad sütununda arama yapıldığını görebilirsiniz. Benzer şekilde diğer sütunlarda da arama yapılmasını istiyorsak o parametrenin NULL olan değeri yerine istenilen değeri vermemiz gerekiyor.
DECLARE @soyad VARCHAR(50) = 'TOGAL' ataması yaparsak hem ad hem de soyad sütunları bu değerlere karşılık gelen verileri listelemiş olur.

Kodlarımızı Kısaltalım 1
DECLARE @ad VARCHAR(50) = NULL
DECLARE @soyad VARCHAR(50) = NULL
DECLARE @cinsiyet VARCHAR(1) = NULL
DECLARE @kullanici_adi VARCHAR(50) = NULL
DECLARE @tc_no CHAR(11) = NULL

SELECT * FROM tblKullanicilar 
WHERE
(
   (@ad IS NULL OR ad = @ad) 
   AND
   (@soyad IS NULL OR soyad = @soyad) 
   AND
   (@cinsiyet IS NULL OR cinsiyet = @cinsiyet) 
   AND
   (@kullanici_adi IS NULL OR kullanici_adi = @kullanici_adi) 
   AND
   (@tc_no IS NULL OR tc_no = @tc_no) 
)

Görüldüğü gibi kodlarımız biraz daha düzene girdi böylece birden çok if koşulunu daha da minimize ederek kod yığınından kurtulmuş olduk. Şimdi ise kodlarımızda biraz daha kısaltmaya gidelim. Mesela aynı tipte olan sütunlar için (VARCHAR sütunlar) parametreleri azaltıp kod kalabalığını biraz daha önlemiş olalım. Ayrıca LIKE komutu ile arayacağımız değerlere uygun kullanıcı için birebir uyanı değil de içerisinde o ifadelerin geçtiği kullanıcıları bulmaya çalışalım.

Kodlarımızı Kısaltalım 2
DECLARE @kelime VARCHAR(50) = 'E'
DECLARE @cinsiyet VARCHAR(1) =  NULL
DECLARE @tc_no CHAR(11) = NULL

SELECT * FROM tblKullanicilar 
WHERE
(
   (@kelime IS NULL OR (ad LIKE '%' + @kelime + '%' OR soyad LIKE '%' + @kelime + '%' OR kullanici_adi LIKE '%' + @kelime + '%')) 
   AND
   (@cinsiyet IS NULL OR cinsiyet = @cinsiyet) 
   AND
   (@tc_no IS NULL OR tc_no = @tc_no) 
)

Şimdi ise ad, soyad, kullanici_adi gibi herhangi bir sütunda AL değeri olup aynı anda cinsiyet = 'K' olan kullanıcıları listeleyelim.

Örnek 5
DECLARE @kelime VARCHAR(50) = 'AL'
DECLARE @cinsiyet VARCHAR(1) =  'K'
DECLARE @tc_no CHAR(11) = NULL

SELECT * FROM tblKullanicilar 
WHERE
(
   (@kelime IS NULL OR (ad LIKE '%' + @kelime + '%' OR soyad LIKE '%' + @kelime + '%' OR kullanici_adi LIKE '%' + @kelime + '%')) 
   AND
   (@cinsiyet IS NULL OR cinsiyet = @cinsiyet) 
   AND
   (@tc_no IS NULL OR tc_no = @tc_no) 
)
Örnek
SQL'de If Else Kullanımı

Yorumlar

  • Meri

    Meri:

    4 ay önce

    Merhaba. if else yapısı ile güncelleme yapabilir miyiz? Örneğin eğer okul sipariş tutarı 50 üstü ise sipariş tutarını 5 düşür gibi.
    3 cevapla
  • Yönetici Yorumu:

    4 ay önce

    Tabii ki yapılabilir. Şöyle bir örnek verebiliriz. Basit bir sipariş tablon olsun. siparis_ID ve siparis_tutar diye kolonları olsun. 4 numaralı siparişin güncellemesini yapacağımızı varsayalım.
    DECLARE @siparis_tutar INT = 0
    SET @siparis_tutar = (SELECT siparis_tutar FROM tblSiparisler where siparis_ID = 4)
    if (@siparis_tutar > 50)
    BEGIN
    UPDATE tblSiparisler set siparis_tutar = siparis_tutar - 5 where siparis_ID = 4
    END
  • Ethem Göze

    Ethem Göze:

    5 ay önce

    Merhaba,
    IF in şart kısmına bir satır değeri alıp hesap yapabiliyor muyum?
    Mesela tabloda her satırda GuncellemeTarihi adlı sütun var ve bu değerler hep aynı. Ben sorgumdan önce bir IF yazıp tablo güncelse tabloyu çalıştırmak istiyorum. Bu sebeple matematiksel islem yapmak için tablodaki GüncellemeTarihi kolonundan bir satır alıp getdate() ile farkını alıp, bu değer mesela 1 günden az ise sorguyu çalıştır diyebilir miyim? Ya da nasıl diyeceğim?
    Teşekkürler.
    2 cevapla
  • Yönetici Yorumu:

    5 ay önce

    Tabi ki yapabilirsiniz. Örnek kod iletiyorum. Kendinize göre düzenlersiniz.
    DECLARE @dtmBugun DATETIME = GETDATE()
    DECLARE @dtmTarih DATETIME
    DECLARE @intFark INT
    SELECT @dtmTarih = eklenme_tarihi FROM IlgiliTablo
    SET @intFark = DAY(@dtmBugun) - DAY(@dtmTarih)
    IF @intFark > 1
    BEGIN
    PRINT '1 Günden fazla zaman var'
    END
    ELSE
    BEGIN
    PRINT 'Çok fazla zaman yok'
    END
  • İbrahim Ergünöz

    İbrahim Ergünöz:

    8 ay önce

    Merhaba. Herkes aynı örnekler üzerinden If Else bloklarını anlatıyor. Oluşturduğunuz tablo için şöyle bir örnek yapabilir misiniz?
    Cinsiyeti K ise yanında açılacak kolonda Kadın yazsın değilse Erkek yazsın.
    8 cevapla
  • Yönetici Yorumu:

    8 ay önce

    SELECT
    ad, soyad,
    (CASE cinsiyet WHEN 'K' THEN 'KIZ' WHEN 'E' THEN 'ERKEK' END) AS CinsiyetGosterim
    FROM tblKullanicilar

    SQL CASE WHEN kullanmanız gerekmektedir. WHERE gibi koşulları siz kendinize göre ekleyebilirsiniz.

Yorum Yaz

Avatar

REKLAM

DDos Koruma, Botnet Koruma, Layer 7 Saldırı koruması, Sanal sunucu, Vds sunucu

REKLAM

Çizgi Filmler

INSTAGRAM VIDEO İNDİR

Instagram Video İndirme Aracı

EN

  • Popüler
  • Yeni
  • Son Yorum