Veritabanı If,Case,while,Goto Kullanımı ve Örnekler 2020- SQL

if else
case when sorgunun akışını belirtiyor if else bağımsız yazılıyor case when select içinde vb.
if else c# gibidir else zorunlu değil ifden sonra parantez zorunlu değil

Veritabanı ile işlem yaparken bazı durumlarda denetim yapmamız gerekebiliyor.
İşte bu durumlar için kullanabileceğimiz yapılardan bahsedeceğiz.Bu yapıların ne gibi kullanabileceğini görmek için yazımızın devamına göz atın !


IF-ELSE Yapısı


if ile bir veya birden çok durumu kontrol ederek işlem yapabiliriz.Örneğin veritabanında herhagi bir isimde tablo bulunuyor mu ?,bir değişkenin içerisindeki değeri denetlemek gibi sorgular oluşturabiliriz.
:
DECLARE @sayi1 int=9; --değişkeni oluşturup içerisine 9 değerini atadık
IF(@sayi1>=10) --değişkenin içindeki değer 10 sayısından küçükmü kontrol ediyoruz.
BEGIN --if koşulundan sonra yapılacak işlemlerin başladığını belirtiyoruz.
PRINT 'sayi 10dan büyüktür veya 10 dur'; --koşul doğru olduğu zaman yapılacak işlemleri yazıyoruz.
END --if koşulundan sonra yapılacak işlemlerin bittiğini belirtiyoruz.
ELSE -- if ile belirtilen koşul yanlış ise olacak işlemleri belirtmek için else kullanıyoruz
BEGIN -- else başlangıcı
SET @sayi1=@sayi1+10; --değişkeni 10 arttırır
 PRINT 'sayi 10dan küçük olduğu için 10 arttırıldı ve yeni değeri'+CAST(@sayi1 as varchar)+' oldu';
END --else bitişi
GO

yukarıdaki örneğin çıktısı 'sayi 10dan küçük olduğu için 10 arttırıldı ve yeni değeri 19 oldu' şeklinde messages kısmında gözükecektir.

If else kullanırken begin ve end yazmanın amacı birden çok satır kod yazılacağı zamanlarda yazılacak kodları bir parantez gibi sarma işlevini görmekte bir satır işlem yapılacağı durumlarda begin - end kullanmamız gerekmemektedir.Yukarıda kullanmamın sebebi kafa karışıklığı olmaması içindi yani yukarıdaki örnekte if'ten sonra kullanılan begin-end kısmı gereksizdir.

Birinci örneğimizde değişken oluşturduk ve değişken üzerinden bir denetim gerçekleştirdik şimdi ise ikinci bir örnek yapacağım ve bu örnekte select sorgusu ile tablo silme işlemini size göstereceğim:

USE ornekdb
GO
IF exists(SELECT * FROM ornektablo where sayi=10) --ornektablo'nun sayi sütunu 10 değerini içeriyor mu ?
DROP TABLE ornektablo -- içeriyorsa tabloyu sil
ELSE
PRINT 'sayi sütunu 10 değeri bulundurmuyor.'

bu örneğimizde de ornektablo isimli tablomunun sayi sütununda 10 değeri bulunuyor mu ? koşulunu yazdık ve bulunuyorsa tabloyu silmesi,bulunmuyorsa ekrana mesaj vermesini sağlamış olduk.Burada kullanılan exists var olduğunu kontrol etmek için kullandığımız bir operatördür.

İf ile birden çok koşul yazmak(and,or)


birden fazla koşul sorgulamak için and,or ifadelerini kullanırız if bloklarının çalışması için and kullandığımızda yazdığımız koşulların tümünün doğru olması,or yazdığımızda herhangi birinin doğru olması gerekmektedir.Örnekle daha iyi açıklanabilir:
IF @sayi>10 and @sayi<20
PRINT 'sayı 10dan büyük ve 20den küçüktür.'
IF @sayi<16 or @sayi<15
PRINT 'sayi 16dan küçük veya 15ten küçüktür.'

böylece birden fazla koşul yazmak için and veya or ifadelerinin kullanıldığını görmüş olduk.

CASE-WHEN-THEN Yapısı

case ile bağımlı sorgular yapabiliriz örneğin bağımlıdan kasıt select gibi ifadelerin içinde kullanılabilir olması örneğin bir tabloda bulunan sayıların  0'a eşit mi ? olduğunu kontrol eden bir yapı oluşturalım(1.yöntem):

USE ornekdb --Bilgisayarımda bulunan test için oluşturduğum veritabanını kullanacağım.
SELECT --select sorgumu başlatıyorum.
CASE sayi --case yapısına denetlemek istediğim tablonun sütün adını yazıyorum.
WHEN 0 THEN 'sayi 0 a eşittir.' --when'de sayi'nın 0'a eşitmi olduğunu sorguluyorum ve then ile mesajı belirtiyorum.
ELSE 'sayi 0 dan farklıdır.' -- else ile yukarıdaki koşulların hiç biri gerçekleşmez ise çalıştırılacak mesajı yazıyorum.
END AS sonuçlar --end ile case yapısını bitiriyorum ve as ile sonuçların listeleneceği tabloya isim veriyorum.
FROM ornektablo --klasik select sorgusunda olduğu gibi tablo adımızı from ile belirtiyoruz.

şeklinde oluşturduğumuz yapıda bilgisayarımda sonuçlar aşağıdaki gibi oldu:

case when  then sql

case kullanmak için ikinci bir yöntem ise case ile değil when ile denetim yapmak bu yöntemde bir den çok sorgu yapmamızı farklı sorguları bir kerede yapmamızı sağlayabiliriz.
bunu daha iyi anlayabilmek için yeni bir sorgu oluşturalım bu sorguda sayımızın 0 mı ? ,negatif mi ? veya pozitif mi ? olduğunu denetleyelim(2.yöntem):

SELECT
CASE --bu sefer case'den sonra bir değer belirtmeyip when ile belirteceğiz
WHEN sayi=0 THEN 'sayi 0'  --sayının 0'a eşitmi olduğunu denetliyoruz.
WHEN sayi<0 THEN 'sayi negatif' --sayının 0'dan büyük olduğunu denetliyoruz.
WHEN sayi>0 THEN 'sayi pozitif' --sayının 0'dan küçük olduğunu denetliyoruz.
END AS sonuçlar2 --ilk örnekteki gibi burada da sonuçları adlandırdık.
FROM ornektablo

bu seferki sorgumun sonuçları bu şekilde oldu:

case sql örnek

gördüğünüz gibi bu sefer case kısmına bir değer belirtmeden when ile koşullarımızı yazıp sorgumuzu çalıştırdık.Ayrıca yapının içirisinde else kullanmanın zorunlu olmadığından bu sefer kullanmadan işlemimizi gerçekleştirdik.

WHILE Döngüsü


while döngüsü koşul doğru olduğu sürece while blokları içerisinde bulunan işlemler gerçekleştirilmeye devam edilecektir.
örneğimizde ekrana 1'den 10'a kadar olan sayıları yazdıralım(değişken içeren örnek):

DECLARE @a int=1;
WHILE (@a<=10) --@a değişkeni 10'dan küçük veya eşit mi ? evet ise döngüye devam edecektir.
BEGIN
PRINT @a
SET @a+=1 --burada @a+=1 işlemi @a=@a+1 anlamına gelmektedir.
END
Seklinde sorgumuzda @a değişkeni 10'dan büyük olana kadar begin-end içerisindeki kodlar çalışmaya devam edecektir.Eğer set ile arttırma işlemi yapılmaz ise döngü sonsuz şekilde çalışabilir.

CONTINUE ve BREAK kullanımı

continue ve break döngülerde oldukça sık kullanılan ifadelerdir.If yapısı ile birlikte kullanabiliriz.
Continue kullandığımızda altında bulunan kodlar çalıştırılmadan sorgu dönmeye devam edecektir.
Break kullanıldığında ise koşul sağlandığında döngü sonlandırılacaktır.

Continue örnek:

DECLARE @a int=1;
WHILE (@a<10)
BEGIN
SET @a+=1 
IF @a<5 CONTINUE -- @a 5 ten büyük olana kadar aşağıdaki kodlar çalışmayacak döngünün başına gidilecektir.
PRINT @a
END

çalıştırdığımız takdirde messages kısmına 5,6,7,8,9,10 rakamlarını alt alta yazdıracaktır.

Break örnek:

DECLARE @a int=1;
WHILE (@a<10)
BEGIN
SET @a+=1 
IF @a>5 break-- @a 5 ten büyük olduğunda döngünün sonlandırılmasını sağlar.
PRINT @a
END

break ile döngünün bitirilmesine yeni bir şart eklemişiz gibi de düşünebilirsiniz tabi if  yazdığımız kısım da oldukça önemli örneğin yukarıda PRINT @a satırını if'ten önce yazarsak print komutu bir kez daha çalıştıktan sonra break olacaktır böylece ekran çıktısı farklı olacak deneyerek görebilirsiniz.
ekran çıktımız 2,3,4,5 şeklinde olacaktır Peki neden çıktı1 ile başlamadı anladınız mı ? biraz düşündükten sonra sebebini kendiniz çözmeniz sizin için yararlı olacaktır.

eğer düşündüyseniz sebebini açıklayabilirim:

while bloklarını incelediğimizde set @a+=1 satırı print $a satırından önce yazıldığı için ilk olarak arttırma işlemi yapılıyor değişkenimiz 2 oluyor ve sonra yazdırılıyor.Eğer 1 sayısınıda yazdırmak isterseniz arttırma işlemi yaptığımız satırı print satırının altına yazabiliriz.
Böylece çıktımız 1,2,3,4,5 rakamları olacaktır.

GoTo

Goto ile döngü ve bazı yönlendirme işlemlerini yapabiliriz.
While ile benzer yapıda döngüler oluşturabiliriz.

Döngü örneği:

DECLARE @deger int=1;
YAZ: --etiket tanımlaması
PRINT @deger
SET @deger+=1
IF @deger<=5 
GOTO YAZ --if koşulu sağlandığı sürece YAZ etiketine gidilir.


Blogger tarafından desteklenmektedir.