Programlama dillerinde kullanmaya alışık olduğumuz if-else, switch-case gibi akış kontrolleri T-SQL içinde kullanılabilir. Dikkat edilmesi gereken en önemli nokta eğer komut sayısı birden fazlaysa BEGIN ve END blokları arasına kodlar yazılmalıdır.
If Else Yapısı
1 2 3 4 5 6 7 8 9 10 |
IF KOSUL KOD ELSE IF KOSUL BEGIN KOD1 KOD2 ... END ELSE KOD |
IF ve ELSE kod bloklarında BEGIN ve END yokken ELSE IF kod bloğunda BEGIN ve END ifadeleri bulunmaktadır. Bunun nedeni ELSE IF bloğunda birden fazla kod çalıştırılacakken IF ve ELSE bloklarında bir adet kod çalıştırıalcaktır. Yani birden fazla kod olması durumunda BEGIN ve END ifadeleri kullanılmak zorundadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
IF EXISTS(SELECT * FROM HESAPLAR WHERE BAKIYE>0) --HESAPLAR tablosunda BAKIYE bilgisi 0'dan büyük kayıt varsa(EXISTS) BEGIN --Birden fazla kod satırı için BEGIN ile başla DECLARE @SAY CHAR --SAY adında değişken tanımlandı SELECT @SAY=COUNT(*) FROM HESAPLAR WHERE BAKIYE<5000 --BAKIYE'si 5000'den küçük kayıtları say(count) ve @SAY değişkenine ata IF (@SAY<10) --EĞER değişkendeki değer 10'dan küçük ise BEGIN --Birden fazla kod satırı için BEGIN ile başla PRINT 'Müşteri Sayınız Yetersiz!' --Messages penceresine mesajı yaz PRINT 'Müşteri Sayısı: '+ @SAY --Messages penceresine mesajı yaz END --Birden fazla kod satırı bitti ELSE IF (@SAY>=10 AND @SAY<100) --EĞER değişkendeki değer 10'a büyük veya eşit ve 100'den küçük ise BEGIN --Birden fazla kod satırı için BEGIN ile başla PRINT 'Müşteri Sayınızı Arttırmalısınız' --Messages penceresine mesajı yaz PRINT 'Müşteri Sayısı: '+ @SAY --Messages penceresine mesajı yaz END --Birden fazla kod satırı bitti ELSE --hiçbir şart sağlanmıyorsa PRINT 'Müşteri Sayınız Yüksek! Müşteri Sayısı: ' + @SAY --Messages penceresine mesajı yaz. BEGIN yok çünkü tek satır kod END --Birden fazla kod satırı bitti ELSE --Şart sağlanmıyorsa PRINT 'HESAPLAR Tablosu Bulunamadı' --Messages penceresine mesajı yaz |
Yukarıda ki kodlar incelendiğiğinde EXISTS ifadesi ilk olarak göze çarpıyor. EXISTS sorgu sonucunda bir değer dönüp dönmediğini kontrol eder. Eğer dönerse True, dönmezse False cevabını verir. Birden fazla kod satırına sahip olacağımız için IF den hemen sonra BEGIN ifadesini yazdık. Eğer tek satırlık sorgumuz olsaydı BEGIN ve END ifadelerine gerek kalmayacaktı. Değişken ile tabloda 5000den küçük kayıtların sayısını sakladık. Her IF satırıyla kayıt sayısına göre Messages penceresinde aşağıda olduğu gibi bir mesaj yayınladık ve END ifadesi ile birden fazla satırların bittiğini tanımladık.
Case Yapısı
Case yapısı birden fazla koşul gerektiren işlemlerin kullanımını kolaylaştırmaktadır. Belirlenen koşul gerçekleştiğinde sütunun içinde ki değer yerine başka bir değer kullanılabilir. Örneğin OGRENCI tablosunun CINSIYET sütunun değerleri 1 ve 0 olarak girildiğini düşünelim. 1 olanları ERKEK 0 olanları KIZ olarak tanımlayabiliriz.
CASE yapısnın 2 farklı kullanımı vardır. İlk kullanım eşitlik durumu kontrolünde kullanılır. İkinci kullanım ise karşılaştırma kontrolünde kullanılır.
1 2 3 4 5 |
CASE SUTUNADI WHEN DEGER1 THEN YENIDEGER1 WHEN DEGER2 THEN YENIDEGER2 ELSE DEGER_N END |
Yukarıda ki Kullanım 1’in kullanım şeklidir. CASE ile kontroledilecek sütun adı yazılır. WHEN ifadesi ile eşit olabilecek değerler kontrol edilir ve yeni değerler girilir.
1 2 3 4 5 6 |
SELECT AD_SOYAD, YENI_CINSIYET= --YENI_CINSIYET adında sütun oluşturduk. CASE CINSIYET --CINSIYET sütununda ki değerleri karşılaştır WHEN '1' THEN 'ERKEK' --1 ise ERKEK olarak göster WHEN '0' THEN 'KIZ' --0 ise KIZ olarak göster END --BİTİR FROM OGRENCI --OGRENCI tablosundna |
Yukarıda ki örnekde YENI_CINSIYET adında ki sütunun içinde, CINSIYET sütununda 1 olan değerleri ERKEK, 0 olan değerleri KIZ olarak gösterecek. Burada kalıcı bir değişiklik olmadığını tekrar belirtelim.
1 2 3 4 5 |
CASE WHEN KARSILASTIRMA_ISLEMI THEN YENIDEGER1 WHEN KARSILASTIRMA_ISLEMI THEN YENIDEGER2 ELSE DEGER_N END |
Yukarıda karşılaştırma değerlerinin gerçekleştiği Kullanım 2’nin gösterimi yapılmıştır.
1 2 3 4 5 6 |
SELECT HESAP_NO, BAKIYE, YENI_BAKIYE= --HESAP_NO, BAKIYE ve YENI_BAKIYE sütunlarını göster. YENI_BAKIYE sütununda şartın sonuçları yazacak CASE --CASE başlangıcı WHEN BAKIYE>1500 THEN 2000 --BAKIYE 1500'den büyük olanları 2000 göster WHEN BAKIYE<2000 THEN 2500 --BAKIYE 2000'den küçük olanları 2500 göster END --CASE bitir FROM HESAPLAR --HESAPLAR tablosundan |
Yukarıdaki örnekde Kullanım 2’ye göre ypaılmıştır. HESAPLAR tablosunun HESAP_NO ve BAKIYE sütunlarına ek olarak YENI_BAKIYE adında sütun oluşturulmuştur. YENI_BAKIYE sütununda CASE işleminde gerçekleşen karşılaştırma sonuçları yansıtılacaktır.
YENI_BAKIYE sütununda yeni degerlerin ekrana yansıtıldığını görüyorsunuz.