Suchbedingung (Transact-SQL)

Gilt für:yesSQL Server (alle unterstützten Versionen) YesAzure SQL-Datenbank YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

Eine Kombination aus einem oder mehreren Prädikaten, die die logischen Operatoren AND, OR und NOT verwenden.

Transact-SQL-Syntaxkonventionen

Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
<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 for Azure Synapse Analytics and 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)
    }

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

<search_condition>
Gibt die Bedingungen für die Zeilen an, die im Resultset einer SELECT-Anweisung, eines Abfrageausdrucks oder einer Unterabfrage zurückgegeben werden sollen. Bei einer UPDATE-Anweisung gibt dieses Argument die Bedingungen für die Zeilen an, die aktualisiert werden sollen. Bei einer DELETE-Anweisung gibt dieses Argument die Bedingungen für die Zeilen an, die gelöscht werden sollen. Es gibt keine Begrenzung für die Anzahl der Prädikate, die in einer Suchbedingung einer Transact-SQL-Anweisung enthalten sein können.

<graph_search_pattern>
Gibt das Graph-Vergleichsmuster an. Weitere Informationen zu den Argumenten für diese Klausel finden Sie unter MATCH (Transact-SQL).

NICHT
Negiert den vom Prädikat festgelegten booleschen Ausdruck. Weitere Informationen finden Sie unter NOT (Transact-SQL).

AND
Kombiniert zwei Bedingungen und gibt TRUE zurück, wenn beide Bedingungen TRUE sind. Weitere Informationen finden Sie unter AND (Transact-SQL).

oder
Kombiniert zwei Bedingungen und gibt TRUE zurück, wenn eine der Bedingungen TRUE ist. Weitere Informationen finden Sie unter OR (Transact-SQL).

< predicate >
Ein Ausdruck, der TRUE, FALSE oder UNKNOWN zurückgibt.

expression
Ein Spaltenname, eine Konstante, eine Funktion, eine Variable, eine skalare Unterabfrage oder eine Kombination aus Spaltennamen, Konstanten und Funktionen, die durch einen Operator bzw. Operatoren oder eine Unterabfrage miteinander verbunden sind. Der Ausdruck kann auch den CASE-Ausdruck enthalten.

Hinweis

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-Zeichenkonstanten und -Variablen in die Codepage, die der Sortierung der referenzierten Spalte entspricht oder die mit COLLATE angegeben ist, sofern sich diese Codepage von der Codepage unterscheidet, die der Standardsortierung der Datenbank entspricht. Zeichen, die in der neuen Codepage nicht gefunden werden, werden in ein ähnliches Zeichen übersetzt, falls eine optimierte Zuordnung gefunden wird. Andernfalls werden sie in das Standardersetzungszeichen "?" konvertiert.

Bei Verwendung mehrerer Codepages kann Zeichenkonstanten der Großbuchstabe 'N' vorangestellt werden. Zudem können Unicode-Variablen verwendet werden, um Codepagekonvertierungen zu vermeiden.

=
Der Operator, mit dem die Gleichheit zwischen zwei Ausdrücken getestet wird.

<>
Der Operator, mit dem die Bedingung zweier Ausdrücke getestet wird, die nicht gleich sind

!=
Der Operator, mit dem die Bedingung zweier Ausdrücke getestet wird, die nicht gleich sind

>
Der Operator, mit dem die Bedingung eines Ausdrucks getestet wird, der größer als der andere ist

>=
Der Operator, mit dem die Bedingung eines Ausdrucks getestet wird, der größer oder gleich dem anderen Ausdruck ist

!>
Der Operator, mit dem die Bedingung eines Ausdrucks getestet wird, der nicht größer als der andere Ausdruck ist

<
Der Operator, mit dem die Bedingung eines Ausdrucks getestet wird, der kleiner als der andere ist

<=
Der Operator, mit dem die Bedingung eines Ausdrucks getestet wird, der kleiner oder gleich dem anderen Ausdruck ist

!<
Der Operator, mit dem die Bedingung eines Ausdrucks getestet wird, der nicht kleiner als der andere Ausdruck ist

string_expression
Eine Zeichenfolge mit Zeichen und Platzhalterzeichen

[ NOT ] LIKE
Zeigt an, dass die nachfolgende Zeichenfolge in Mustervergleichen verwendet werden soll. Weitere Informationen finden Sie unter LIKE (Transact-SQL).

ESCAPE 'escape_character'
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.

[ NOT ] BETWEEN
Gibt einen Inklusivbereich von Werten an. Verwenden Sie AND, um den Anfangs- und den Endwert voneinander zu trennen. Weitere Informationen finden Sie unter BETWEEN (Transact-SQL).

IS [ NOT ] NULL
Gibt eine Suche nach NULL-Werten oder nach Werten ungleich Null in Abhängigkeit von den verwendeten Schlüsselwörtern an. Ein Ausdruck mit einem bitweisen oder arithmetischen Operator gibt NULL zurück, wenn einer der Operanden gleich NULL ist.

IS [ NOT ] DISTINCT FROM
Vergleicht die Gleichheit zweier Ausdrücke und garantiert das Ergebnis TRUE oder FALSE, auch wenn einer oder beide Operanden NULL sind. 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 in Verbindung mit SELECT-Anweisungen verwendet werden. Weitere Informationen finden Sie unter CONTAINS (Transact-SQL).

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 in Verbindung mit SELECT-Anweisungen verwendet werden. Weitere Informationen finden Sie unter FREETEXT (Transact-SQL).

[ 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 (Transact-SQL).

subquery
Kann als eine eingeschränkte SELECT-Anweisung betrachtet werden, die <query_expresssion> in der SELECT-Anweisung ähnelt. Die ORDER BY-Klausel und das INTO-Schlüsselwort sind nicht zulässig. Weitere Informationen finden Sie unter SELECT (Transact-SQL).

ALL
Wird mit einem Vergleichsoperator und einer Unterabfrage verwendet. Gibt TRUE für <predicate> zurück, wenn alle für die Unterabfrage abgerufenen Werte die Vergleichsoperation erfüllen, bzw. FALSE, wenn nicht alle Werte dem Vergleich entsprechen oder die Unterabfrage keine Zeilen an die äußere Anweisung zurückgibt. Weitere Informationen finden Sie unter ALL (Transact-SQL).

{ SOME | ANY }
Wird mit einem Vergleichsoperator und einer Unterabfrage verwendet. Gibt TRUE für <predicate> zurück, wenn einer der für die Unterabfrage abgerufenen Werte die Vergleichsoperation erfüllt, bzw. FALSE, wenn keine Werte dem Vergleich entsprechen oder die Unterabfrage keine Zeilen an die äußere Anweisung zurückgibt. Der Ausdruck ist andernfalls UNKNOWN. Weitere Informationen finden Sie unter SOME | ANY (Transact-SQL).

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 (Transact-SQL).

Bemerkungen

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 zur Verarbeitung von logischen Werten durch logische Operatoren finden Sie unter AND (Transact-SQL), OR (Transact-SQL) und NOT (Transact-SQL).

Beispiele

A. Verwenden von WHERE mit der 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. Ohne Angeben der ESCAPE-Option würde die Abfrage nach allen Beschreibungswerten suchen, die das Wort green gefolgt von einem anderen Zeichen als _ enthalten.

USE AdventureWorks2012 ;  
GO  
SELECT *   
FROM Production.ProductPhoto  
WHERE LargePhotoFileName LIKE '%greena_%' ESCAPE 'a' ;  

B. Verwenden der WHERE- und LIKE-Syntax mit Unicodedaten

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 AdventureWorks2012 ;  
GO  
SELECT AddressLine1, AddressLine2, City, PostalCode, CountryRegionCode    
FROM Person.Address AS a  
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 Unicodedaten

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%';  

Siehe auch