Aracılığıyla paylaş


IN (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Belirtilen değerin bir alt sorgudaki veya listedeki herhangi bir değerle eşleşip eşleşmediğini belirler.

Transact-SQL söz dizimi kuralları

Syntax

test_expression [ NOT ] IN   
    ( subquery | expression [ ,...n ]  
    )   

Arguments

test_expression
Geçerli bir ifadedir.

subquery
Bir sütundan oluşan bir sonuç kümesine sahip bir alt sorgudur. Bu sütun, test_expression ile aynı veri türüne sahip olmalıdır.

ifade[ ,... n ]
Eşleşme testi için ifadelerin listesidir. Tüm ifadeler test_expression ile aynı türde olmalıdır.

Sonuç Türleri

Boolean

Sonuç Değeri

test_expression değeri alt sorgu tarafından döndürülen herhangi bir değere eşitse veya virgülle ayrılmış listedeki herhangi bir ifadeye eşitse, sonuç değeri DOĞRU olur; aksi takdirde sonuç değeri YANLIŞ'tır.

DEĞİl IN kullanılması alt sorgu değerini veya ifadeyi olumsuzlar.

Caution

ALT sorgu veya ifade tarafından döndürülen ve IN veya NOT IN kullanılarak test_expression karşılaştırılan tüm null değerler BILINMIYOR. IN veya NOT IN ile birlikte içinde null değerlerin kullanılması beklenmeyen sonuçlara neden olabilir.

Remarks

Bir IN yan tümcesinde, parantez içinde son derece büyük sayıda değerin (virgülle ayrılmış binlerce değer) açıkça eklenmesi, kaynakları kullanabilir ve 8623 veya 8632 hataları döndürebilir. Bu sorunu geçici olarak çözmek için, in listesindeki öğeleri bir tabloda depolayın ve IN yan tümcesi içinde select alt sorgusu kullanın.

Hata 8623:

The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.

Hata 8632:

Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.

Examples

A. OR ve IN karşılaştırması

Aşağıdaki örnek, tasarım mühendisi, araç tasarımcısı veya pazarlama yardımcısı olan çalışanların adlarının listesini seçer.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle = 'Design Engineer'   
   OR e.JobTitle = 'Tool Designer'   
   OR e.JobTitle = 'Marketing Assistant';  
GO  

Ancak, IN kullanarak aynı sonuçları alırsınız.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, e.JobTitle  
FROM Person.Person AS p  
JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');  
GO  

Her iki sorgudan da sonuç kümesi aşağıdadır.

FirstName   LastName      Title  
---------   ---------   ---------------------  
Sharon      Salavaria   Design Engineer                                     
Gail        Erickson    Design Engineer                                     
Jossef      Goldberg    Design Engineer                                     
Janice      Galvin      Tool Designer                                       
Thierry     D'Hers      Tool Designer                                       
Wanida      Benshoof    Marketing Assistant                                 
Kevin       Brown       Marketing Assistant                                 
Mary        Dempsey     Marketing Assistant                                 
  
(8 row(s) affected)  

B. IN'i bir alt sorguyla kullanma

Aşağıdaki örnek, yıl için 250.000 TL'den SalesPerson fazla satış kotası olan çalışanların tablosundaki satış temsilcilerinin tüm kimliklerini Employee bulur ve tablodan alt sorgudaki EmployeeID sonuçlarla eşleşen tüm çalışanların SELECT adlarını seçer.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName  
FROM Person.Person AS p  
    JOIN Sales.SalesPerson AS sp  
    ON p.BusinessEntityID = sp.BusinessEntityID  
WHERE p.BusinessEntityID IN  
   (SELECT BusinessEntityID  
   FROM Sales.SalesPerson  
   WHERE SalesQuota > 250000);  
GO  

Sonuç kümesi aşağıdadır.

FirstName   LastName                                             
---------   --------   
Tsvi         Reiter                                              
Michael      Blythe                                              
Tete         Mensa-Annan                                         
  
(3 row(s) affected)  

C. Not IN'i bir alt sorguyla kullanma

Aşağıdaki örnek, kotası 250.000 TL'den büyük olmayan satışçıları bulur. NOT IN değerler listesindeki öğelerle eşleşmeyen satışçıları bulur.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName  
FROM Person.Person AS p  
    JOIN Sales.SalesPerson AS sp  
    ON p.BusinessEntityID = sp.BusinessEntityID  
WHERE p.BusinessEntityID NOT IN  
   (SELECT BusinessEntityID  
   FROM Sales.SalesPerson  
   WHERE SalesQuota > 250000);  
GO  

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

D. IN ve NOT IN kullanma

Aşağıdaki örnek, tablodaki FactInternetSales tablodaki değerlerle SalesReasonKey eşleşen DimSalesReason tüm girişleri bulur.

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
IN (SELECT SalesReasonKey FROM DimSalesReason);   

Aşağıdaki örnek, tablodaki tablodaki FactInternetSalesReason değerlerle SalesReasonKey eşleşmeyen DimSalesReason tüm girişleri bulur.

-- Uses AdventureWorks  
  
SELECT * FROM FactInternetSalesReason   
WHERE SalesReasonKey   
NOT IN (SELECT SalesReasonKey FROM DimSalesReason);  

E. IN'i ifade listesiyle kullanma

Aşağıdaki örnek, ya da DimEmployeeMikeolan adlarına sahip çalışanların tablosundaki Michael satış temsilcilerinin tüm kimliklerini bulur.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName  
FROM DimEmployee  
WHERE FirstName IN ('Mike', 'Michael');  

Ayrıca Bkz.

CASE (Transact-SQL)
İfadeler (Transact-SQL)
Yerleşik İşlevler (Transact-SQL)
İşleçler (Transact-SQL)
SEÇ (Transact-SQL)
BURADA (Transact-SQL)
HEPSI (Transact-SQL)
BAZI | ANY (Transact-SQL)