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
Örnek 1
DECLARE @adiniz VARCHAR(50) = 'Serkan' IF @adiniz IS NOT NULL SELECT * FROM tblKullanicilar WHERE ad = @adiniz
Örnek 1 Sonucu
Ö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
Örnek 3
DECLARE @cinsiyet VARCHAR(1) = 'K' IF @cinsiyet = 'K' SELECT * FROM tblKullanicilar WHERE cinsiyet = 'K'
Örnek 3 Sonucu
Bu örneğimizde ise doğum tarihi boş olmayan ve 2015-01-01 tarihinden sonra doğmuş kişileri listeleyelim.
Örnek 4DECLARE @dogum_tarihi DATE = '2015-01-01' IF @dogum_tarihi IS NOT NULL SELECT * FROM tblKullanicilar WHERE dogum_tarihi > @dogum_tarihi
Örnek 4 Sonucu
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.
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 2DECLARE @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 5DECLARE @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) )