IN (Transact-SQL)
Aktualisiert: 05. Dezember 2005
Ermittelt, ob ein angegebener Wert mit einem Wert aus einer Unterabfrage oder Liste übereinstimmt.
Transact-SQL-Syntaxkonventionen
Syntax
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Argumente
- test_expression
Ist ein gültiger Ausdruck.
- subquery
Eine Unterabfrage mit einem Resultset, das aus einer Spalte besteht. Diese Spalte muss denselben Datentyp besitzen wie test_expression.
- expression[ ,... n ]
Eine Liste mit Ausdrücken, die auf Übereinstimmungen geprüft werden sollen. Alle Ausdrücke müssen denselben Datentyp besitzen wie test_expression.
Ergebnistypen
Boolean
Ergebniswert
Wenn der Wert von test_expression gleich einem von subquery zurückgegebenen Wert oder einem beliebigen anderen expression-Ausdruck aus der durch Kommas getrennten Liste ist, ist der Ergebniswert TRUE; andernfalls ist er FALSE.
Durch Verwenden von NOT IN wird der Wert von subquery oder expression negiert.
Vorsicht: |
---|
Bei von subquery oder expression zurückgegebenen NULL-Werten, die mithilfe von IN oder NOT IN mit test_expression verglichen werden, wird UNKNOWN zurückgegeben. Werden NULL-Werte zusammen mit IN oder NOT IN verwendet, kann dies zu unerwarteten Ergebnissen führen. |
Beispiele
A. Vergleichen von OR und IN
Im folgenden Beispiel wird eine Liste der Namen von Mitarbeitern ausgewählt, die Konstruktionsingenieure, Werkzeugkonstrukteure oder Marketingassistenten sind.
USE AdventureWorks;
GO
SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE e.Title = 'Design Engineer'
OR e.Title = 'Tool Designer'
OR e.Title = 'Marketing Assistant';
GO
Sie können jedoch dieselben Ergebnisse mithilfe von IN abrufen.
USE AdventureWorks;
GO
SELECT FirstName, LastName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c
ON e.ContactID = c.ContactID
WHERE e.Title IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
GO
Im Folgenden wird das Resultset der beiden Abfragen aufgeführt.
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. Verwenden von IN in einer Unterabfrage
Im folgenden Beispiel werden alle IDs der Vertriebsmitarbeiter in der SalesPerson
-Tabelle von Mitarbeitern ermittelt, deren jährliche Sollvorgabe über 250.000 EUR liegt, und aus der Employee
-Tabelle die Namen aller Mitarbeiter ausgewählt, bei denen EmployeeID
mit den Ergebnissen der SELECT
-Unterabfrage übereinstimmt.
USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact AS c
JOIN HumanResources.Employee AS e
ON e.ContactID = c.ContactID
WHERE EmployeeID IN
(SELECT SalesPersonID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO
Dies ist das Resultset.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan
(3 row(s) affected)
C. Verwenden von NOT IN in einer Unterabfrage
Im folgenden Beispiel wird nach Vertriebsmitarbeitern gesucht, deren Sollvorgabe nicht über 250.000 EUR liegt. NOT IN
sucht nach den Mitarbeitern, die den Elementen in der Werteliste nicht entsprechen.
USE AdventureWorks
GO
SELECT FirstName, LastName
FROM Person.Contact AS c
JOIN HumanResources.Employee AS e
ON e.ContactID = c.ContactID
WHERE EmployeeID NOT IN
(SELECT SalesPersonID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000)
GO
Siehe auch
Verweis
CASE (Transact-SQL)
Ausdrücke (Transact-SQL)
Funktionen (Transact-SQL)
Operatoren (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
ALL (Transact-SQL)
SOME | ANY (Transact-SQL)
Andere Ressourcen
Grundlegende Informationen zu Unterabfragen
Unterabfragen mit IN
Mit ANY, SOME oder ALL modifizierte Vergleichsoperatoren
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
05. Dezember 2005 |
|