SQL Exists ve Not Exists, WHERE bloğunda kullanmış olduğumuz IN ifadesinin kullanımına benzer olarak, EXISTS ve NOT EXISTS ifadeleride alt sorgudan getirilen değerlerin içerisinde bir değerin olması veya olmaması durumunda işlem yapılmasını sağlar.
SQL Exists ve Not Exists Nedir, Örnekli Nasıl Kullanılır?
IN ifadesinin kullanımına benzer olarak, EXISTS ve NOT EXISTS ifadeleride alt sorgudan getirilen değerlerin içerisinde bir değerin olması veya olmaması durumunda işlem yapılmasını sağlar. EXISTS ifadesi kullanıldığında, alt sorguda istenilen şartların yerine getirildiği durumlarda ilgili kaydın listelenmesini sağlar. NOT EXITS ise EXISTS‘in tam tersi olarak alt sorguda istenilen şartların sağlanmadığı durumlarda ilgili kaydın listelenmesini sağlar.
Kullanacağımız örnek Ogrenci ve Bolum tabloları içeriği şu şekilde.
Ogrenci
OgrenciNo | Ad | Soyad | BolumID |
---|---|---|---|
211533 | Murat | ÖNER | 1 |
211534 | Şevket | MOR | 2 |
211535 | Ramazan | KURT | 3 |
211536 | Hatice | DUMAN | 4 |
Bolum
BolumID | Ad |
---|---|
1 | Bilgisayar Mühendisliği |
2 | İnşaat Mühendisliği |
3 | Edebiyat |
Alttaki örnekte EXISTS ifadesinin kullanımı yer almaktadır.
Exists Kullanımı
1 2 | SELECT Ad FROM Ogrenci AS o WHERE EXISTS (SELECT * FROM Bolum AS b WHERE o.BolumID=b.BolumID) |
Üstteki koddan biraz bahsetmek gerekirse Ogrenci tablosundaki öğrencilerin adını listeleyen bir sorgu var fakat gelecek olan öğrenciler where kısmındaki koşula göre listelenecek bu koşul açıklaması ise şöyle eğer öğrencinin BolumID alanındaki değer Bolum tablosunda BolumID alanında var ise o zaman ilgili öğrenci listelenecektir.
Üstte paylaşmış olduğum Ogrenci ve Bolum tabloları üzerinden Exists sql kodunu çalıştırdığımızda alttaki gibi bir çıktı elde edeceğiz.
Not Exists Kullanımı
Üstteki Exists örneğimizin tam tersini yapıyoruz şimdide bu sorguyu açıklamak gerekirse bolum tablosunda ilgili öğrenicinin bölümüne karşılık gelen bölüm yok ise o zaman sorgulaması yapılan öğrenci listelenecektir.
1 2 | SELECT Ad FROM Ogrenci AS o WHERE NOT EXISTS (SELECT * FROM Bolum AS b WHERE o.BolumID=b.BolumID) |
Bu sql kodunu üstte paylaştığım örnek Ogrenci ve Bolum verileri üzerinden çalıştıracak olursak alttaki gibi bir çıktı elde edeceğiz.
📚 Benzer Makaleler
📚 SQL Exists ve Not Exists Kaynakları
- https://technet.microsoft.com/tr-tr/library/ms184297(v=sql.105).aspx
- https://msdn.microsoft.com/en-us/library/ms188336.aspx
✍ Lütfen olumlu-olumsuz tüm görüşlerinizi bana yorum yada mail yolu ile iletmeyi ihmal etmeyin.
🔗 Sosyal medya kanallarından makaleyi paylaşarak destek olursanız çok sevinirim.
👋 Bir sonraki makalede görüşmek dileğiyle.
Merhaba, benim bir tablomda bir barkod numarası var. bu barkod numaralarının statüleri var. ve her statü için tarihler var.
Örneğin, aşağıdaki gibi bir tablo olduğunu düşünelim. ben sonuç alanımda şu bilgiyi görmek istiyorum. barkod numarasına ait a statülü en güncel tarihli tek bir satır görmek istiyorum.
Mevcut Tablo:
id, barkod, statü, tarih
10, 3333, a statü, 01.01.2023
20, 3333, a statü, 02.02.2023
30, 3333, b statü, 02.02.2023
40, 3334, a statü, 03.03.2023
50, 3334, a statü, 04.04.2023
sorgudan sonra görmek istediğim;
id, barkod, statü, tarih
20, 3333, a statü, 02.02.2023
50, 3334, a statü, 04.04.2023
Allah razı olsun hocam.
Teşekkür ederim
ben c# içindeki verileri çekip eğer içinde o değer yer almıyorsa onu sql e yazdırılmasını istiyorum bunu nasıl yapabilirim??
Yanlış anlamadıysam şöyle birşey yapmak istiyorsunuz veritabanında bir tablodan kontrol yapıp eğer kayıt yoksa insert yaptırmak istiyorsunuz doğrumudur?
evet öyle yapmak istiyorum.
O zaman ihtiyacınız olan kod şu şekilde.
Bu arada sql server’damı çalışıyorsunuz yoksa farklı bir platformmu?
Teşekkürler.Exists kullanımını çok iyi anladım sayenizde
Rica ederim, yorumunuz için teşekkürler.
Teşekkürler açıklamalar için.
Rica ederim, bende yorumunuz için teşekkür ederim.