Suchbedingung (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL-Analyseendpunkt in Microsoft Fabric Warehouse in Microsoft Fabric SQL-Datenbank in Microsoft Fabric
Eine Kombination aus einem oder mehreren Prädikaten, die die logischen Operatoren AND
, OR
und NOT
.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax für SQL Server, Azure SQL-Datenbank und Azure SQL verwaltete Instanz.
<search_condition> ::=
MATCH (<graph_search_pattern>) | <search_condition_without_match> | <search_condition> AND <search_condition>
<search_condition_without_match> ::=
{ [ NOT ] <predicate> | ( <search_condition_without_match> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition_without_match> ) } ]
[ ...n ]
<predicate> ::=
{ expression { = | <> | != | > | >= | !> | < | <= | !< } expression
| string_expression [ NOT ] LIKE string_expression
[ ESCAPE 'escape_character' ]
| expression [ NOT ] BETWEEN expression AND expression
| expression IS [ NOT ] NULL
| expression IS [ NOT ] DISTINCT FROM
| CONTAINS
( { column | * } , '<contains_search_condition>' )
| FREETEXT ( { column | * } , 'freetext_string' )
| expression [ NOT ] IN ( subquery | expression [ , ...n ] )
| expression { = | < > | != | > | >= | ! > | < | <= | ! < }
{ ALL | SOME | ANY } ( subquery )
| EXISTS ( subquery ) }
<graph_search_pattern> ::=
{ <node_alias> {
{ <-( <edge_alias> )- }
| { -( <edge_alias> )-> }
<node_alias>
}
}
<node_alias> ::=
node_table_name | node_table_alias
<edge_alias> ::=
edge_table_name | edge_table_alias
Syntax für Azure Synapse Analytics und Parallel Data Warehouse.
< search_condition > ::=
{ [ NOT ] <predicate> | ( <search_condition> ) }
[ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]
[ ...n ]
<predicate> ::=
{ expression { = | <> | != | > | >= | < | <= } expression
| string_expression [ NOT ] LIKE string_expression
| expression [ NOT ] BETWEEN expression AND expression
| expression IS [ NOT ] NULL
| expression [ NOT ] IN (subquery | expression [ , ...n ] )
| expression [ NOT ] EXISTS (subquery)
}
Argumente
<search_condition>
Gibt die Bedingungen für die Zeilen an, die im Resultset für eine Anweisung, einen SELECT
Abfrageausdruck oder eine Unterabfrage zurückgegeben werden. Gibt für eine UPDATE
Anweisung die zu aktualisierenden Zeilen an. Gibt für eine DELETE
Anweisung die zu löschenden Zeilen an. Es gibt keine Beschränkung auf die Anzahl von Prädikaten, die in eine Suchbedingung für Transact-SQL-Anweisungen eingeschlossen werden können.
<graph_search_pattern>
Gibt das Graph-Vergleichsmuster an. Weitere Informationen zu den Argumenten für diese Klausel finden Sie unter VERGLEICH
NICHT
Negiert den vom Prädikat festgelegten booleschen Ausdruck. Weitere Informationen finden Sie unter NOT.
UND
Kombiniert zwei Bedingungen und wertet aus TRUE
, wenn beide Bedingungen sind TRUE
. Weitere Informationen finden Sie unter AND.
ODER
Kombiniert zwei Bedingungen und wertet aus TRUE
, wenn eine bedingung ist TRUE
. Weitere Informationen finden Sie unter OR.
<predicate>
Ein Ausdruck, der zurückgibt TRUE
, FALSE
oder UNKNOWN
. Weitere Informationen finden Sie im Artikel zu Prädikaten.
expression
Gibt einen Spaltennamen, eine Konstante, eine Funktion, eine Variable, eine skalare Unterabfrage oder eine beliebige Kombination von Spaltennamen, Konstanten und Funktionen an, die von einem Operator oder Operator oder einer Unterabfrage verbunden sind. Der Ausdruck kann auch den CASE
Ausdruck enthalten.
Nicht-Unicode-Zeichenfolgenkonstanten und -Variablen verwenden die Zeichenfolge in die Codepage, die der Standardsortierung der Datenbank entspricht. Codepagekonvertierungen können auftreten, wenn nur Nicht-Unicode-Zeichendaten verwendet werden und auf die Nicht-Unicode-Zeichendatentypen char, varchar und text verwiesen wird. SQL Server konvertiert Nicht-Unicode-Zeichenfolgenkonstanten und -variablen in die Codeseite, die der Sortierung der spalte oder der angegebenen Verwendung COLLATE
entspricht, wenn diese Codeseite sich von der Codeseite unterscheidet, die der Standardsortierung der Datenbank entspricht. Alle Zeichen, die auf der neuen Codeseite nicht gefunden werden, werden in ein ähnliches Zeichen übersetzt, wenn eine passende Zuordnung gefunden werden kann, oder anderweitig in das Standardersetzungszeichen von ?
.
Wenn Sie mit mehreren Codeseiten arbeiten, können Zeichenkonstanten dem Großbuchstaben N
vorangestellt werden, und Unicode-Variablen können verwendet werden, um Codeseitenkonvertierungen zu vermeiden.
=
-Operator
Der Operator zum Testen der Gleichheit zwischen zwei Ausdrücken.
<>
-Operator
Der Operator, der verwendet wird, um die Bedingung von zwei Ausdrücken zu testen, die nicht gleicheinander sind.
!=
-Operator
Der Operator, der verwendet wird, um die Bedingung von zwei Ausdrücken zu testen, die nicht gleicheinander sind.
>
-Operator
Der Operator, der zum Testen der Bedingung eines Ausdrucks verwendet wird, der größer als der andere ist.
>=
-Operator
Der Operator zum Testen der Bedingung eines Ausdrucks, der größer oder gleich dem anderen Ausdruck ist.
!>
-Operator
Der Operator, der zum Testen der Bedingung eines Ausdrucks verwendet wird, der nicht größer als der andere Ausdruck ist.
<
-Operator
Der Operator, der verwendet wird, um die Bedingung eines Ausdrucks zu testen, der kleiner als der andere ist.
<=
-Operator
Der Operator, der zum Testen der Bedingung eines Ausdrucks verwendet wird, der kleiner oder gleich dem anderen Ausdruck ist.
!<
-Operator
Der Operator zum Testen der Bedingung eines Ausdrucks, der nicht kleiner als der andere Ausdruck ist.
string_expression
Eine Zeichenfolge von Zeichen und Wildcardzeichen.
[ NICHT ] MÖGEN
Zeigt an, dass die nachfolgende Zeichenfolge in Mustervergleichen verwendet werden soll. Weitere Informationen finden Sie unter LIKE.
ESCAPE 'escape_ Zeichen'
Ermöglicht einem Platzhalterzeichen, dass es in einer Zeichenfolge gesucht werden kann, statt als Platzhalter zu fungieren. escape_character ist das Zeichen, das vor das Platzhalterzeichen gesetzt wird, um diese besondere Verwendung anzugeben.
[ NICHT ] ZWISCHEN
Gibt einen Inklusivbereich von Werten an. Wird verwendet AND
, um die Anfangs- und Endwerte zu trennen. Weitere Informationen finden Sie unter BETWEEN.
IS [ NOT ] NULL
Gibt eine Suche nach Nullwerten oder nach Werten an, die nicht NULL sind, je nach verwendeten Schlüsselwörtern. Ein Ausdruck mit einem bitweisen oder arithmetischen Operator wird ausgewertet, NULL
wenn einer der Operanden ist NULL
.
IS [ NOT ] DISTINCT FROM
Vergleicht die Gleichheit von zwei Ausdrücken und garantiert ein wahres oder falsches Ergebnis, auch wenn ein oder beide Operanden sind NULL
. Weitere Informationen finden Sie unter IS [NOT] DISTINCT FROM (Transact-SQL).
CONTAINS
Sucht Spalten, die zeichenbasierte Daten für genaue oder ungenaue (Fuzzy-)Übereinstimmungen mit einzelnen Wörtern und Satzteilen enthalten, die innerhalb einer bestimmten Entfernung angrenzenden Wörter sowie gewichtete Übereinstimmungen. Diese Option kann nur mit SELECT
Anweisungen verwendet werden. Weitere Informationen finden Sie unter CONTAINS.
FREETEXT
Stellt eine einfache Form der Abfrage in natürlicher Sprache dar, indem Spalten mit zeichenbasierten Daten im Hinblick auf Werte untersucht werden, die mit der Bedeutung übereinstimmen, statt dass die genauen Wörter im Prädikat gesucht werden. Diese Option kann nur mit SELECT
Anweisungen verwendet werden. Weitere Informationen finden Sie unter FREETEXT.
[ NOT ] IN
Gibt die Suche nach einem Ausdruck an, die auf dem Einschluss oder Ausschluss des Ausdrucks in eine bzw. aus einer Liste basiert. Bei dem Suchausdruck kann es sich um eine Konstante oder einen Spaltennamen handeln. Die Liste kann eine Reihe von Konstanten oder in der Regel eine Unterabfrage sein. Schließen Sie die Liste der Werte in Klammern ein. Weitere Informationen finden Sie unter IN.
subquery
Kann als eingeschränkte SELECT
Anweisung betrachtet werden und ähnelt <query_expression>
in der SELECT
Anweisung. Die ORDER BY
Klausel und das INTO
Schlüsselwort sind nicht zulässig. Weitere Informationen finden Sie unter SELECT.
ALL
Wird mit einem Vergleichsoperator und einer Unterabfrage verwendet. Gibt zurück TRUE
<predicate>
, wenn alle Für die Unterabfrage abgerufenen Werte den Vergleichsvorgang erfüllen oder FALSE
wenn nicht alle Werte den Vergleich erfüllen oder wenn die Unterabfrage keine Zeilen an die äußere Anweisung zurückgibt. Weitere Informationen finden Sie unter ALL.
{ SOME | ANY }
Wird mit einem Vergleichsoperator und einer Unterabfrage verwendet. Gibt zurück TRUE
<predicate>
, wann ein für die Unterabfrage abgerufener Wert den Vergleichsvorgang erfüllt oder FALSE
wenn keine Werte in der Unterabfrage den Vergleich erfüllen oder wenn die Unterabfrage keine Zeilen an die äußere Anweisung zurückgibt. Andernfalls lautet UNKNOWN
der Ausdruck . Weitere Informationen finden Sie unter SOME | ANY.
EXISTS
Wird mit einer Unterabfrage verwendet, um Tests im Hinblick auf das Vorhandensein von Zeilen durchzuführen, die von der Unterabfrage zurückgegeben wurden. Weitere Informationen finden Sie unter EXISTS.
Hinweise
Die Rangfolge der logischen Operatoren beginnt mit NOT
(höchster Operator). Darauf folgt AND
und anschließend OR
. Mithilfe von Klammern kann diese Rangfolge in einer Suchbedingung überschrieben werden. Die Reihenfolge der Auswertung logischer Operatoren kann variieren, abhängig von den vom Abfrageoptimierer gewählten Optionen. Weitere Informationen dazu, wie die logischen Operatoren mit Logikwerten arbeiten, finden Sie unter AND, OR und NOT.
Beispiele
Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.
A. Verwenden von WHERE mit LIKE- und ESCAPE-Syntax
Im folgenden Beispiel wird nach den Zeilen gesucht, in denen die Spalte LargePhotoFileName
die Zeichen green_
aufweist, und die Option ESCAPE
verwendet, da es sich bei _
um ein Platzhalterzeichen handelt. Wenn Sie die ESCAPE
Option nicht angeben, sucht die Abfrage nach Beschreibungswerten, die das Wort green
gefolgt von einem anderen Zeichen als dem _
Zeichen enthalten.
USE AdventureWorks2022;
GO
SELECT *
FROM Production.ProductPhoto
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a';
B. Verwenden der WHERE- und LIKE-Syntax mit Unicode-Daten
Im folgenden Beispiel wird die WHERE
-Klausel zum Abrufen der Postanschrift für Unternehmen außerhalb der USA (US
) in einer Stadt, deren Namen mit Pa
beginnt, abgerufen.
USE AdventureWorks2022;
GO
SELECT AddressLine1,
AddressLine2,
City,
PostalCode,
CountryRegionCode
FROM Person.Address AS a
INNER JOIN Person.StateProvince AS s
ON a.StateProvinceID = s.StateProvinceID
WHERE CountryRegionCode NOT IN ('US')
AND City LIKE N'Pa%';
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
C. Verwenden von WHERE mit LIKE
Im folgenden Beispiel wird nach den Zeilen gesucht, in denen die LastName
-Spalte die Zeichen and
aufweist.
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE '%and%';
D: Verwenden der WHERE- und LIKE-Syntax mit Unicode-Daten
Im folgenden Beispiel wird die WHERE
-Klausel verwendet, um einen Unicode-Suchvorgang in der LastName
-Spalte durchzuführen.
-- Uses AdventureWorks
SELECT EmployeeKey,
LastName
FROM DimEmployee
WHERE LastName LIKE N'%and%';