(Transact-SQL)
Belirtilen değer bir alt sorgu veya bir listedeki herhangi bir değer eşleşip belirler.
Transact-SQL Sözdizim Kuralları
Sözdizimi
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Bağımsız değişkenler
test_expression
Herhangi bir geçerli ifade.subquery
Bir sütunun sonuç kümesi olan bir alt sorgu ise. Bu sütunda aynı veri türü olarak olmalıdır test_expression.expression[ ,... n ]
Bir maç için sınamak için ifadeler listesidir. Tüm ifadeler aynı türde olmalıdır test_expression.
Sonuç türleri
Boolean
Sonuç değeri
Eğer değeri test_expressiontarafından döndürülen herhangi bir değere eşit subqueryya da birine eşit olan expressionvirgülle ayrılmış listesi, doğru'yu; sonucu değeridir Aksi takdirde sonuç false değeridir.
not IN kullanarak her subquerydeğeri veya expression.
Dikkat |
---|
Herhangi bir döndürülen değerleri null subqueryya expression, karşılaştırılır test_expressionIN kullanarak ya da bilinmeyen dönmek değil. NULL values ın birlikte IN ile veya değil beklenmeyen sonuçlar verebilir. |
Açıklamalar
IN yan tümcesi içinde bir çok sayıda değerleri (binlerce) dahil olmak üzere, kaynaklarını tüketir ve Hata 8623 veya 8632 dönün. Bu sorunu çözmek için öğeler listesinde Tablo depolar.
Hata 8623 oluşuyor:
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 oluşuyor:
Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.
Örnekler
A.Karşılaştırma or ve In
Aşağıdaki örnek, tasarım mühendisleri, araç tasarımcıları veya pazarlama yardımcılar çalışanların adları listesini seçer.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person 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ı almak
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
GO
Sonuç kümesini ya da bir sorgu İşte.
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)
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 ile bir alt sorgu kullanma
Aşağıdaki örnek, satış temsilcileri için tüm kimlikleri bulur. SalesPersonyıl 250.000 $ büyük bir satış kotası var ve sonra seçer Çalışanlar tablosunu Employeetüm çalışanların adlarını tablo nerede EmployeeID, maç sonuçlarından SELECTsorgu.
USE AdventureWorks2012;
GO
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 buradadır.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
C.not IN ile bir alt sorgu kullanma
Aşağıdaki örnek, bir kota 250.000 $ büyük olmayan satışçılar bulur. NOT INdeğerler listesindeki öğeleri eşleşmiyor satışçılar bulur.
USE AdventureWorks2012
GO
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