Transact SQL’de IF EXISTS ve NOT EXISTS KULLANIMI

Standart

Yapmış olduğumuz bir sorgunun bir sonuç döndürüp döndürmediğini anlamak için IF EXISTS kullanırız. Bir çalışan tablomuzun olduğunu düşünelim. Ve bu tabloya yeni bir çalışan eklemek istiyoruz fakat bu çalışan eğer veri tabanına daha önceden eklenmemişse eklemek eğer daha önceden eklenmişse maaşını güncellemek istiyoruz. Bu ve buna benzer bir durumda eklenecek kaydın daha önceden eklenip eklenmediğini anlamak için IF EXISTS kullanırız. Bir örnekle inceleyelim.

Yukarıda bahsettiğimiz veri tabanını tanımlayıp verilerini ekleyelim.

DECLARE @calisan TABLE
(
    ID int,
    isim varchar(15),
    maas int,
    sehir varchar(15)
);

INSERT @calisan (ID, isim, maas, sehir) VALUES
(1, 'Metin', 3000, 'Ankara'),
(2, 'Seval', 5000, 'Eskişehir'),
(3, 'Ali', 1500, 'Bursa'),
(4, 'Uğur', 3500, 'Eskişehir'),
(5, 'Tolga', 5500, 'Bursa'),
(6, 'Erdi', 3000, 'Bursa'),
(7, 'Mehmetcan', 4500, 'İstanbul'),
(8, 'Ufuk', 3500, 'İstanbul'),
(9, 'Erkan', 2500, 'Mersin'),
(10, 'Tuna', 2700, 'Mersin'),
(11, 'Mustafa', 2800, 'Ankara'),
(12, 'Selçuk', 2000, 'Ankara'),
(13, 'Adnan', 8000, 'Mersin');

Şimdi değişkenlere atadığımız değerleri kontrol ederek senaryoya uygun olarak veri tabanında değişiklik yapacak veya yeni kayıt ekleyecek kodları yazalım. Aynı isim ve şehirde yaşayan kişiler aynı kisi kabul edilecek. Ve bu iki değerin aynı olduğu durumda maaş değeri güncellenecek fakat aynı değilse de yeni kişiyi tabloya ekleyeceğiz.


--Eklenecek kaydın verileri
DECLARE @isim varchar(15) = 'Tolga';
DECLARE @maas int = 2500;
DECLARE @sehir varchar(15) = 'Bursa';

IF EXISTS(SELECT * FROM @calisan WHERE isim = @isim AND sehir = @sehir)
    UPDATE @calisan SET maas = @maas WHERE isim = @isim AND sehir = @sehir;
ELSE
    INSERT @calisan (ID, isim, maas, sehir) VALUES (14, @isim, @maas, @sehir);

SELECT * FROM @calisan;

Aynı kodu not exists kullanarak aşağıdaki gibi yazabiliriz. Bu sefer mantık yoksa ekle varsa güncelle şeklinde değişti.


--Eklenecek kaydın verileri
DECLARE @isim varchar(15) = 'Tolga';
DECLARE @maas int = 2500;
DECLARE @sehir varchar(15) = 'Bursa';

IF NOT EXISTS(SELECT * FROM @calisan WHERE isim = @isim AND sehir = @sehir)
    INSERT @calisan (ID, isim, maas, sehir) VALUES (14, @isim, @maas, @sehir);
ELSE
    UPDATE @calisan SET maas = @maas WHERE isim = @isim AND sehir = @sehir;
SELECT * FROM @calisan;

Sonuç olarak eklemek istediğimiz kayıt(tolga) veri tabanında bulunduğu için güncellenecek.

ID isim maas sehir
1 Metin 3000 Ankara
2 Seval 5000 Eskişehir
3 Ali 1500 Bursa
4 Uğur 3500 Eskişehir
5 Tolga 2500 Bursa
6 Erdi 3000 Bursa
7 Mehmetcan 4500 İstanbul
8 Ufuk 3500 İstanbul
9 Erkan 2500 Mersin
10 Tuna 2700 Mersin
11 Mustafa 2800 Ankara
12 Selçuk 2000 Ankara
13 Adnan 8000 Mersin

Yorum bırakın