Sql Server in Operatörü

Herkese merhaba, Sql Server yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda in operatörünü anlatacağım. Hadi başlayalım !
Table of Contents
in Operatörü Kullanım Alanı
in operatörü sadece where filtrelerinde kullanılabilmekte ve kendisi birden çok veri arasında arama yapmaya yarıyor. Ayrıca birden çok or yazmanın çok daha kısa bir halidir. Yani örneğin bir tablo içerisinde elinizde olan verilerin var olup olmadığını arıyorsanız in operatörünü kullanabilirsiniz. Kullanırken fonksiyon gibi yazılır ve içerisine en fazla 2100 tane parametre alabilir. Yazım kuralı ise şöyledir;
... where sütun_adı in(veri_1, veri_2, veri_3, ..., veri_n);
Kod Örnekleri
Buradaki sütun_adı kısmına üzerinde filtreleme yapmak istediğiniz sütunun adını, in() içerisine de aradığınız verileri yazmanız gerekmekte. Örneğin int tipte id ve varchar tipte kitapAdi sütunları bulunan kitaplar adında bir tablonun olduğunu varsayalım ve bu kitaplar tablosunda Sefiller, Kürk Mantolu Madonna, Kuyucaklı Yusuf, Da Vinci Şifresi, Kayıp Tanrılar Ülkesi, Ben Kirke, Suç ve Ceza, Hayvan Çiftliği, Küçük Prens kitaplarının olup olmadığına bakalım;
select * from kitaplar where kitapAdi in('Sefiller', 'Kürk Mantolu Madonna', 'Kuyucaklı Yusuf', 'Da Vinci Şifresi', 'Kayıt Tanrılar Ülkesi', 'Ben Kirke', 'Suç ve Ceza', 'Hayvan Çiftliği', 'Küçük Prens');
Bu sorguyu çalıştırdığımızda in() içerisinde belirttiğimiz kitaplar arasında tabloda kayıtlı olanların listesi gelecektir. Ayrıca bu sorgunun or ile yazımı şu şekilde olacaktır;
select * from kitaplar where kitapAdi = 'Sefiller' or kitapAdi = 'Kürk Mantolu Madonna' or kitapAdi = 'Kuyucaklı Yusuf' or kitapAdi = 'Da Vinci Şifresi' or kitapAdi = 'Kayıp Tanrılar Ülkesi' or kitapAdi = 'Ben Kirke' or kitapAdi = 'Suç ve Ceza' or kitapAdi = 'Hayvan Çiftliği' or kitapAdi = 'Küçük Prens';
Görüldüğü üzere in() operatörünü kullanmak hem sorgunun uzunluğunu kısaltıyor hemde sorgunun daha hızlı çalışmasını sağlıyor. in() operatörü ile arama yaptığımızda, Sql Server her bir veriyi teker teker kontrol ediyor ve bulduğu verileri biriktirip tüm kontroller bittikten sonra çıktı olarak gösteriyor.
not in Operatörü
in() operatörünün tersi durumuda var; not in(). not in() operatörü ise in() operatörünün zıttı olarak parantez içerisine yazdığımız aranacak kelimeler haricindeki verileri getiriyor. Yani öncelikle tüm verileri getiriyor, not in() içerisine verdiğimiz verileri çıkarıp kalanları çıktı olarak gösteriyor. Örneğin az önce yazdığımız örneğin not in() ile yazımı şöyle olacaktır;
select * from kitaplar where kitapAdi not in('Sefiller', 'Kürk Mantolu Madonna', 'Kuyucaklı Yusuf', 'Da Vinci Şifresi', 'Kayıt Tanrılar Ülkesi', 'Ben Kirke', 'Suç ve Ceza', 'Hayvan Çiftliği', 'Küçük Prens');
Bu sorgu kitaplar tablosundaki tüm verileri getirecek ve bizim belirttiğimiz kitapları o veriler arasından çıkarıp kalanları bize gösterecektir.
Tablo Sorgularında Kullanma
in() operatörü sadece statik yani sabit veriler üzerinde değil, bir Sql sorgusu sonucu içerisinde de kullanılabilmekte. Yani iki farklı tablonuz var ve iki tablonun bir sütunu ortak, yani bir sütun her iki tabloda da var diyelim. Birinci tabloda olup ikinci tabloda olmayan yada ikinci tabloda olup birinci tabloda olmayan verileri de in() operatörü ile tespit edebiliriz. Örneğin musteriler ve saticilar adında iki farklı tablonun olduğunu ve iki tabloda da ulke sütunu olduğunu varsayalım. saticilar tablosunda kayıtlı olan ülkelerden musteriler tablosunda kayıtlı birisi var mı diye kontrol etmek istediğimizde şöyle bir Sql sorgusu yazmamız gerekiyor;
select * from musteriler where ulke in(select ulke from saticilar);
Bu sorgu saticilar tablosundaki tüm ülkeleri getirecek ve bu ülkeleri musteriler tablosunda arayacaktır. Bulduğu sonuçları yine çıktı olarak gösterecektir. Fakat bu sorgu sonucunda saticilar tablosuyla ilgili herhangi birşey görünmeyecektir.
Evet Sql Server’da in() operatörü kullanımı bu şekilde yapılmakta. Tüm Sql Server yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.