Anasayfa / Yazılım / SQL / IN ve NOT IN Operatorünün Kullanımı

IN ve NOT IN Operatorünün Kullanımı

IN operatörü T-SQL’de çok sık kullanılan operatörlerdendir. Bu operatör ile bir kolon içinde yer alan verilerin istediğimiz veriler olup olmadığını karşılaştırma yaparak kontrol etmesini sağlarız. Kullanımı aşağıdaki gibidir.

SELECT kolonadı1, kolonadı2 FROM Tablo WHERE kolonadı IN (değer1, değer2)

Örnekleme yapıyorum.

SELECT BusinessEntityID, Title, FirstName, MiddleName, LastName, ModifiedDate
FROM Person.Person WHERE FirstName = 'Ken' AND LastName IN ('Myer','Meyer');

Bu sorgu ile Person.Person tablosunda FirstName alanı Ken olan ve LastName alanı Myer ya da Meyer olan tüm verileri listeliyoruz. Listelediğimiz alanlar BusinessEntityID, Title, FirstName, MiddleName, LastName, ModifiedDate

201201

SELECT TerritoryID, Name, CountryRegionCode, 'Group' , SalesYTD, SalesLastYear, CostYTD
FROM Sales.SalesTerritory WHERE TerritoryID IN (3,7,6,9)

Bu sorgu ile Sales.SalesTerritory tablosundan TerritoryID alanı 3,7,6,9 olan verilerin TerritoryID, Name, CountryRegionCode, ‘Group’ , SalesYTD, SalesLastYear, CostYTD alanlarını listeliyoruz.

Bu arada üstteki deyim içinde Group alanı için tırnak içinde yazdığımı görüyorsunuz. Bunun sebebi şudur, SQL Server Management Sistem’de Group deyimi özel bir deyimdir. Dolayısı ile benim bunu bir kolon adı olarak ifade edebilmem için tırnak içinde yazmam gerekir. Eğer normal şekilde yazsa idim sorgum çalışmayacaktı.

201202

SELECT TerritoryID, Name, CountryRegionCode, 'Group' , SalesYTD, SalesLastYear, CostYTD
FROM Sales.SalesTerritory WHERE TerritoryID NOT IN (3,7,6,9)

Bu sefer NOT IN kullanarak verdiğim değerler dışının listelenmesini sağlıyorum. Bu sorgu ile Sales.SalesTerritory tablosundan TerritoryID alanı 3,7,6,9 olan veriler dışındaki TerritoryID, Name, CountryRegionCode, ‘Group’ , SalesYTD, SalesLastYear, CostYTD alanlarını listeliyoruz.

201203

Örneklerimizi biraz komplike yapalım :

AdventureWorks veri tabanı üzerinde çalışıyorum.

Sales.SalesOrderHeader tablosundan OrderDate alanı 2005 Ekim ayı (October) boyunca olan ve TotalDue alanı 45000 dolardan fazla olan verilerin SalesOrderID, OrderDate, TotalDue, SalesPersonID, TerritoryID alanlarını listelemek istiyorum. Nasıl bir sorgu yazarım?

SELECT SalesOrderID, OrderDate, TotalDue, SalesPersonID, TerritoryID
FROM Sales.SalesOrderHeader 
WHERE OrderDate BETWEEN '2005-10-01' AND '2005-10-31' AND TotalDue > 45000

201204

Aynı şekilde bu sefer OrderDate alanı 20 Ekim (October) ile 23 Ekim arası olanları ve 10000 dolardan fazla olanları listeleyelim. Ancak bunu 3 farklı sorgu ile de aynı sonucu almak istiyorum.

SELECT SalesOrderID, OrderDate, TotalDue, SalesPersonID, TerritoryID
FROM Sales.SalesOrderHeader 
WHERE OrderDate BETWEEN '2005-10-20' AND '2005-10-23' AND TotalDue > 1000

Bunda BETWEEN yapısını kullandık.

SELECT SalesOrderID, OrderDate, TotalDue, SalesPersonID, TerritoryID
FROM Sales.SalesOrderHeader 
WHERE OrderDate IN ('2005-10-20', '2005-10-21', '2005-10-22', '2005-10-23')
AND TotalDue > 1000

Bu seferde IN yapısını kullandık.

SELECT SalesOrderID, OrderDate, TotalDue, SalesPersonID, TerritoryID
FROM Sales.SalesOrderHeader 
WHERE (OrderDate >= '2005-10-20' AND OrderDate <= '2005-10-23') AND TotalDue > 1000

Bunda da sadece mantıksal operatörü tercih ettik. Üç sorgununda sonucu aynıdır. 16 tane sonuç döndü.

201205

Sales.SalesOrderHeader tablosundan totalDue değeri 3000 dolardan fazla, SalesPersonID 283 ve TerritoryID 5 olan verileri listelemek istiyorum. Listelemek istediğim alanlar: SalesOrderID,OrderDate, TotalDue, SalesPersonID, TerritoryID

SELECT SalesOrderID,OrderDate, TotalDue, SalesPersonID, TerritoryID
FROM Sales.SalesOrderHeader
WHERE TotalDue > 3000 AND (SalesPersonID=283 OR TerritoryID=5);

201206

Aynı şekilde ben bir de TerritoryID alanı 3 olanları da listemek istiyorum.

SELECT SalesOrderID,OrderDate, TotalDue, SalesPersonID, TerritoryID
FROM Sales.SalesOrderHeader
WHERE TotalDue > 3000 AND (SalesPersonID=283 OR TerritoryID IN (5,3));

201207

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir