Sdílet prostřednictvím


Podmínka hledání (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Kombinace jednoho nebo více predikátů, které používají logické operátory AND, ORa NOT.

Transact-SQL konvence syntaxe

Syntax

Syntaxe pro SQL Server, Azure SQL Database a Spravovanou instanci Azure SQL

<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

Syntaxe pro Azure Synapse Analytics a paralelní datový sklad

< 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)
    }

Arguments

<search_condition>

Určuje podmínky pro řádky vrácené v sadě výsledků pro SELECT příkaz, výraz dotazu nebo poddotaz. UPDATE U příkazu určuje řádky, které se mají aktualizovat. DELETE Pro příkaz určuje řádky, které se mají odstranit. Počet predikátů, které lze zahrnout do podmínky hledání příkazů Transact-SQL, není nijak omezený.

<graph_search_pattern>

Určuje vzor shody grafu. Další informace o argumentech této klauzule naleznete v tématu POZVYHLEDAT

NOT

Neguje logický výraz určený predikátem. Další informace naleznete v tématu NE.

AND

Kombinuje dvě podmínky a vyhodnocuje se TRUE , když jsou TRUEobě podmínky . Další informace najdete v tématu AND.

OR

Kombinuje dvě podmínky a vyhodnocuje se TRUE , pokud je TRUEobě podmínky . Další informace najdete v tématu NEBO.

<predicate>

Výraz, který vrací TRUE, FALSEnebo UNKNOWN. Další informace naleznete v tématu Predikáty.

expression

Určuje název sloupce, konstantu, funkci, proměnnou, skalární poddotaz nebo libovolnou kombinaci názvů sloupců, konstant a funkcí spojených operátorem nebo operátory nebo poddotazem. Výraz může také obsahovat CASE výraz.

Řetězcové konstanty a proměnné jiné než Unicode používají znakovou stránku, která odpovídá výchozí kolaci databáze. Převody znakových stránek můžou nastat, když pracujete pouze s daty jiných znaků než Unicode a odkazují na znakové typy znaků jiné než Unicode, varchar a text. SQL Server převede řetězcové konstanty a proměnné jiné než Unicode na znakovou stránku, která odpovídá kolaci odkazovaného sloupce nebo zadané pomocí COLLATE, pokud se tato znaková stránka liší od znakové stránky, která odpovídá výchozí kolaci databáze. Všechny znaky, které nebyly nalezeny na nové znakové stránce, jsou přeloženy na podobný znak, pokud lze najít mapování nejvhodnější nebo jinak jsou převedeny na výchozí náhradní znak ?.

Při práci s více znakovými stránkami mohou být znakové konstanty předpony velkým písmenem Na proměnné Unicode lze použít, aby se zabránilo převodům znakových stránek.

= operátor

Operátor použitý k otestování rovnosti mezi dvěma výrazy.

<> operátor

Operátor použitý k otestování podmínky dvou výrazů, které se navzájem nerovnají.

!= operátor

Operátor použitý k otestování podmínky dvou výrazů, které se navzájem nerovnají.

> operátor

Operátor použitý k otestování podmínky jednoho výrazu, který je větší než druhý.

>= operátor

Operátor použitý k otestování podmínky jednoho výrazu, který je větší nebo roven druhému výrazu.

!> operátor

Operátor použitý k otestování podmínky jednoho výrazu není větší než druhý výraz.

< operátor

Operátor použitý k otestování podmínky jednoho výrazu je menší než druhý.

<= operátor

Operátor použitý k otestování podmínky jednoho výrazu je menší nebo roven druhému výrazu.

!< operátor

Operátor použitý k otestování podmínky jednoho výrazu není menší než druhý výraz.

string_expression

Řetězec znaků a zástupných znaků.

[ NE ] JAKO

Označuje, že následující řetězec znaku se má použít s porovnávání vzorů. Další informace najdete v tématu LIKE.

ESCAPE znak escape_

Umožňuje vyhledávání zástupných znaků v řetězci znaků místo toho, aby fungovalo jako zástupný znak. escape_character je znak, který je vložen před zástupný znak označující toto zvláštní použití.

[ NE ] MEZI

Určuje inkluzivní rozsah hodnot. Slouží AND k oddělení počátečních a koncových hodnot. Další informace naleznete v tématu BETWEEN.

JE [ NENÍ ] NULL

Určuje hledání hodnot null nebo hodnoty, které nejsou null v závislosti na použitých klíčových slovech. Výraz s bitovým nebo aritmetickým operátorem se vyhodnotí, NULL jestli je NULLněkterý z operandů .

JE [ NENÍ ] ODLIŠNÝ OD

Porovná rovnost dvou výrazů a zaručuje pravdivý nebo nepravdivý výsledek, i když jeden nebo oba operandy jsou NULL. Další informace naleznete v tématu IS [NOT] DISTINCT FROM (Transact-SQL).

CONTAINS

Vyhledá sloupce, které obsahují data založená na znakech, aby byly přesné nebo méně přesné (přibližné) shody s jedním slovem a frázemi, blízkosti slov v určité vzdálenosti od sebe a vážené shody. Tuto možnost lze použít pouze s SELECT příkazy. Další informace naleznete v tématu CONTAINS.

FREETEXT

Poskytuje jednoduchou formu dotazu v přirozeném jazyce vyhledáváním sloupců obsahujících data založená na znakech pro hodnoty, které odpovídají významu místo přesných slov v predikátu. Tuto možnost lze použít pouze s SELECT příkazy. Další informace naleznete v tématu FREETEXT.

[ NE ] V

Určuje hledání výrazu na základě toho, jestli je výraz součástí nebo vyloučen ze seznamu. Hledaný výraz může být konstanta nebo název sloupce a seznam může být sada konstant nebo obvykle poddotaz. Uzavřete seznam hodnot do závorek. Další informace najdete v tématu IN.

subquery

Lze považovat za omezený SELECT příkaz a je podobný <query_expression> v SELECT příkazu. Klauzule ORDER BY a INTO klíčové slovo nejsou povoleny. Další informace najdete v tématu SELECT.

ALL

Používá se s relačním operátorem a poddotazem. Vrátí TRUE hodnotu, <predicate> pokud všechny hodnoty načtené pro poddotaz splňují operaci porovnání, nebo FALSE pokud ne všechny hodnoty splňují porovnání nebo když poddotaz nevrátí žádné řádky do vnějšího příkazu. Další informace najdete v tématu VŠE.

{ NĚKTERÉ | JAKÝKOLI }

Používá se s relačním operátorem a poddotazem. Vrátí TRUE hodnotu pro <predicate> případ, že jakákoli hodnota načtená pro poddotaz splňuje operaci porovnání, nebo FALSE pokud žádné hodnoty v poddotazu splňují porovnání nebo když poddotaz vrátí žádné řádky do vnějšího příkazu. V opačném případě je UNKNOWNvýraz . Další informace naleznete v tématu SOME | ANY.

EXISTS

Používá se s poddotazem k otestování existence řádků vrácených poddotazem. Další informace naleznete v tématu EXISTS.

Remarks

Pořadí priorit logických operátorů je NOT (nejvyšší), následované AND, následované OR. Závorky lze použít k přepsání této priority ve hledané podmínce. Pořadí vyhodnocení logických operátorů se může lišit v závislosti na volbách provedených optimalizátorem dotazů. Další informace o tom, jak logické operátory pracují s hodnotami logiky, naleznete v tématu AND, OR a NOT.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

A. Použití WHERE se syntaxí LIKE a ESCAPE

Následující příklad vyhledá řádky, ve kterých LargePhotoFileName má sloupec znaky green_, a používá ESCAPE možnost, protože _ je zástupný znak. Pokud tuto možnost nezadáte ESCAPE , dotaz vyhledá všechny hodnoty popisu, které obsahují slovo green následované libovolným jiným znakem, než _ je znak.

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

B. Použití syntaxe WHERE a LIKE s daty Unicode

Následující příklad používá WHERE klauzuli k načtení poštovní adresy pro jakoukoli společnost, která je mimo Spojené státy (US) a ve městě, jehož jméno začíná Pa.

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

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

C. Použití where s like

Následující příklad vyhledá řádky, ve kterých LastName sloupec obsahuje znaky and.

-- Uses AdventureWorks

SELECT EmployeeKey,
    LastName
FROM DimEmployee
WHERE LastName LIKE '%and%';

D. Použití syntaxe WHERE a LIKE s daty Unicode

Následující příklad používá klauzuli WHERE k provedení vyhledávání Unicode ve sloupci LastName .

-- Uses AdventureWorks

SELECT EmployeeKey,
    LastName
FROM DimEmployee
WHERE LastName LIKE N'%and%';